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

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. fopen函数原型: ```c FILE *fopen(const char *filename, const char *mode); ``` 使用说明: - filename:文件名,可以是相对路径或绝对路径,需要包含文件扩展名。 - mode:访问模式,可以是 `"r"`(只读)、`"w"`(只写)、`"a"`(追加)、`"rb"`(二进制只读)、`"wb"`(二进制只写)、`"ab"`(二进制追加)等。 返回值: - 成功打开文件返回指向该文件的指针。 - 打开文件失败返回 `NULL`。 2. fclose函数原型: ```c int fclose(FILE *stream); ``` 使用说明: - stream:打开文件的指针。 返回值: - 关闭文件成功返回 0。 - 关闭文件失败返回非 0 值。 3. fread函数原型: ```c size_t fread(void *ptr, size_t size, size_t count, FILE *stream); ``` 使用说明: - ptr:指向要读取数据的缓冲区。 - size:每个数据项的字节数。 - count:要读取的数据项数。 - stream:打开文件的指针。 返回值: - 返回实际读取的数据项数,如果该值小于 count,则可能是读取到了文件末尾或者发生了错误。 4. fwrite函数原型: ```c size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream); ``` 使用说明: - ptr:指向要写入数据的缓冲区。 - size:每个数据项的字节数。 - count:要写入的数据项数。 - stream:打开文件的指针。 返回值: - 返回实际写入的数据项数,如果该值小于 count,则可能是因为磁盘已满或者发生了错误。 5. fseek函数原型: ```c int fseek(FILE *stream, long offset, int whence); ``` 使用说明: - stream:打开文件的指针。 - offset:偏移量,可以是正数或负数,如果是负数则表示向文件开头偏移。 - whence:偏移的位置,可以是 `SEEK_SET`(文件开头)、`SEEK_CUR`(当前位置)、`SEEK_END`(文件结尾)。 返回值: - 执行成功返回 0。 - 执行失败返回非 0 值。 使用注意事项: - 在使用文件 I/O 函数时,需要先打开文件,处理完后再关闭文件。 - 在使用 freadfwrite 函数时,需要注意缓冲区的大小,避免溢出。 - 在使用 fseek 函数时,需要注意偏移量的取值范围,避免越界访问文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值