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