欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Linux中的fopen,fclose,fread,fwrite,fseek相关函数的知识点

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

2024/10/25 0:27:55 来源:https://blog.csdn.net/2302_81386929/article/details/140659181  浏览:    关键词:Linux中的fopen,fclose,fread,fwrite,fseek相关函数的知识点

这几个函数都是标准的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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com