Linux中的fopen,fclose,fread,fwrite,fseek相关函数的知识点

news2024/11/11 6:57:57

这几个函数都是标准的c库函数,在man 2中查找不到,所以我们可以利用man 手册直接查找

对应的open,close,write,fread都是Linux系统内核调用

可移植性:fopen 强过于 open ...

fopen 在用户态是缓存的

open 在用户态是没有缓存的

fopen函数

fclose函数

对主要代码的说明:

先声明一个指向的FILE类型的指针fp,FILE用于表示一种文件流,fp用来存放fopen的文件指针,如果打开失败继续保持为NULL指针。

定义的nRet是用来存储fclose的返回值,关闭失败返回-1运行提示符

fp=fopen("mm","w");//表示用写入的模式打开名为mm的文件,如果文件不存在则创建该文件

fread函数

函数原型

size_t fread(void*buff , size_t size, size_t count , FILE* stream)

第一个参数为接收数据的指针(buff),也即数据存储的地址

第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节

第三个参数为元素个数,即要读取的数据大小为size的元素个素

第四个参数为提供数据的文件指针,该指针指向文件内部数据 返回值:读取的总数据元素个数

 主要代码

成功读取

mm文件中的数据

主要代码的解释

引用了字符串管理库,用于mamset函数清零缓冲区

变量nRet可用于存储两个函数的返回值,fread和fclose的返回值

char readBuff[12];//用作从文件中读取数据的缓冲区,我们假定数据能够被存放下

memset的用法,将readBuff缓冲区的所有字节清零,避免读取数据时遇到未定义的值  ,对数组初始化防止在读取时出现代码

nRet=fread(readBuff,4,2,fd);//尝试从文件中读取数据,指定从文件中读取两个元素,每个元素大小为4字节,并存储到readBuff中

fwrite函数

基本函数

int fwrite(void*buffer,intsize,intcount,FILE*fp)

第一个参数为指向写入的元素数组的指针

第二个参数为被写入元素大小的,这里的4就表示4个字节也就是hell这4个字符

第三个参数为写入文件的元素个数,这里只写入一次

第四个元素是指向FLIE元素的指针(一个文件这里指fd)

因为当我们先进行fread操作,光标已经移动到123456789的最后一位,所以当我们写入时,也是从第九位开始写入,即12345678hell

fseek函数

主要用于在文件中定位流的位置,允许将文件的内部位置指针移动到指定的位置,从而可以在文件的任意位置进行读写操作。

函数原型:

int fseek(FILE *stream, long int offset, int origin);

参数说明

  • stream:指向FILE对象的指针,该对象标识了要操作的文件流。
  • offset:表示从origin指定的位置开始移动的字节数。这个值可以是正数也可以是负数,正数表示向后移动,负数表示向前移动。
  • origin:指定了offset的起始位置,它必须是以下三个常量之一:
    • SEEK_SET:文件的开头。
    • SEEK_CUR:文件的当前位置。
    • SEEK_END:文件的末尾。

返回值

  • 成功时,fseek函数返回0
  • 失败时,返回非0值,并设置errno以指示错误。

注意事项

  • 在使用fseek之前,必须确保文件已经以适当的模式(如"r", "r+", "w", "w+", "a", "a+"等)打开,并且stream参数指向一个有效的文件流。
  • fseek主要用于二进制文件,虽然也可以用于文本文件,但在某些系统上,对于文本文件的fseek操作可能会受到文本模式的影响(如行结束符的转换)。
  • 并非所有文件类型都支持fseek操作,特别是那些不支持随机访问的文件(如某些类型的管道或设备文件)。

注意,在使用fseek函数之前文件的数据为12345678hell

fseek(fd,1,SEEK_SET);//文件名为fd,从文件数据的开头偏移一个单位量,将光标的位置移动到2的位置,所以再次进行写入也是从2的位置写入,故    1hell678hell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP粘包问题详解和解决方案【C语言】

1.什么是TCP粘包 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输协议,它保证了数据的可靠性和顺序性。然而,由于TCP是基于字节流而不是消息的,因此在传输过…

javaEE-01-tomcat

文章目录 javaWebTomcat启动 Tomcat 服务器测试服务器是否成功停止tomcat服务器修改服务器的端口号 Idea整合tomcat服务器 javaWeb 所有通过 Java 语言编写可以通过浏览器访问的程序的总称,是基于请求和响应来开发的。 请求: 客户端给服务器发送数据(Request)响应: 服务器给客…

LINUX环境下使用yum安装JDK1.8并配置环境变量

LINUX环境下使用yum安装JDK1.8并配置环境变量 1.查看CentOS自带JDK是否已安装 yum list installed |grep java2.批量卸载JDK rpm -qa | grep java | xargs rpm -e --nodeps3.直接yum安装1.8.0版本openjdk(其他版本请自行修改版本号) yum install java-1.8.0-openjdk* -y4.默…

4 Go语言的操作符

本专栏将从基础开始,循序渐进,由浅入深讲解Go语言,希望大家都能够从中有所收获,也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方,请指正!大家一起学习,…

智慧园区整体一站式解决方案(PPT原件完整版)

软件全套资料部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书,技术解决方…

SQL labs-SQL注入(四,sqlmap对于post传参方式的注入)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 序言:本文主要讲解基于SQL labs靶场,sqlmap工具进行的post传参方式的SQL注入。 传参方式有两类,一类是直接在url栏内进行url编码后进行的传参&am…

批量打断相交线——ArcGIS 解决方法

在数据处理,特别是地理空间数据处理或是任何涉及图形和线条分析的场景中,有时候需要把相交的线全部从交点打断一个常见的需求。这个过程对于后续的分析、编辑、或是可视化展现都至关重要,因为它可以确保每条线都是独立的,避免了因…

LabVIEW放大器自动测量系统

开发了一个基于LabVIEW平台的多路前置放大器自动测量系统的开发与实施。该系统集成了硬件控制与软件编程,能够实现放大器各项性能指标的快速自动测量,有效提高了测试的精确性和效率。系统设计采用了虚拟仪器技术,结合了先进的测量与控制策略&…

Redis 7.x 系列【30】集群管理命令

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 集群信息2.1 CLUSTER INFO 3. 节点管理3.1 CLUSTER MYID3.2 CLUSTER NODES3…

UI界面卡顿检测工具--UIHaltDetector

引言: 在日常工作当中,我们经常会遇到软件的界面出现卡顿的问题,而为了确定卡顿原因,我特地写了一个UI界面卡顿的小工具:UIHaltDetector;该工具可以在检测到目标窗口出现卡顿的时候直接打印堆栈日志和输出…

Windows系统安全加固方案:快速上手系统加固指南 (下)

这里写目录标题 一、概述二、IP协议安全配置启用SYN攻击保护 三、文件权限3.1 关闭默认共享3.2 查看共享文件夹权限3.3 删除默认共享 四、服务安全4.1禁用TCP/IP 上的NetBIOS4.2 ### 禁用不必要的服务 五、安全选项5.1启动安全选项5.2禁用未登录前关机 六、其他安全配置**6.1防…

基于 HTML+ECharts 实现的数据可视化大屏案例(含源码)

数据可视化大屏案例:基于 HTML 和 ECharts 的实现 数据可视化已成为企业决策和业务分析的重要工具。通过直观、动态的图表展示,数据可视化大屏能够帮助用户快速理解复杂的数据关系,发现潜在的业务趋势。本文将介绍如何利用 HTML 和 ECharts 实…

基于JAVA+SpringBoot+Vue的前后端分离的医院后勤管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 医院后勤管理系统是一…

LLama 405B 技术报告解读

LLama 405B 技术报告解读 果然传的消息都是真的,meta在24号凌晨发布了llama 3的405B版本,这次还是做一个技术报告解读。 值得一提的是,在技术报告的开头,meta特意强调了一个 Managing complexity,大意是管控复杂度。…

echarts实现在市级行政区点击县级行政区,显示单个县级行政区地图数据

因需兼容ie,此处所有变量声明都用var。如无需支持,可另做let修改。 这里以常州市为例,我们可以去阿里云提供的地理工具去截取地图json数据DataV.GeoAtlas地理小工具系列 点击所选区域,右侧会对应显示json数据,再次点击右侧红框内…

【Hec-Ras】案例1:韩国Seung-gi stream稳定流/非稳定流模拟

Hec-Ras案例1:韩国Seung-gi stream 研究区域:Seung-gi stream(韩国)研究数据降水数据(Rainfall data) 步骤1:创建工程文件/打开已有工程文件步骤2:参数调整步骤2.1:数据导…

Android .rc规则详解与init 启动

系列文章请扫关注公众号! 简介 Android的init进程是启动各种服务的核心进程,并处理属性设置等。怎么启动各个服务和监听属性的呢?启动过程中会解析rc文件,并存下来。当系统属性更改或启动某项服务时,init就会按照rc中的设置运行对…

SpringBoot集成Tomcat、DispatcherServlet

通过 SpringBoot 自动配置机制,导入配置类 利用 SpringBoot 自动配置机制,SpringBoot 会导入一个类型为 ServletWebServerFactoryAutoConfiguration 的配置类 ServletWebServerFactoryAutoConfiguration ServletWebServerFactoryAutoConfigurations 类上…

软考中级网络工程师考什么?应该怎么正确备考

网络工程师软考中级难易度50%,不太难。但是如果准备不足就悬了,赶紧备考起来吧。 网络工程师每年考两次,相比其他的软考考试一年中考的机会又多了一次,而且软考网工也是挺热门的科目,每年很多人报考,相对的…

CoAP——Libcoap安装和使用(Ubuntu22.04)

1、简介 CoAP(Constrained Application Protocol)是一种专为受限设备和网络设计的应用层协议。它类似于HTTP,但具有更轻量级的特性,适合用于物联网(IoT)环境中的低功耗和低带宽设备。Libcoap是一个轻量级的…