在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以
字符
的
ASCII
代码值的形式存放。我们知道,
ASCII代码
值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。
注:char c==EOF 可以这样用
feof(FILE *stream) 返回1文件到结尾,返回0没到
fgets()
格式:char *fgets(char *s, int n, FILE *stream);
作用
从流中读一行或指定个字符
fgetc()
格式:int fgetc(FILE *stream);
这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。
fseek()
int fseek(FILE *stream, long offset, int fromwhere)
文件任意定位修改,打开模式是“rb+”
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(
指针
偏移量)个字节的位置,函数返回0。如果执行失败(
比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。
实验得出,超出文件末尾位置,还是返回0。往回偏移超出首位置,返回-1,且指向一个-1的位置,请小心使用。
调用形式:
fseek(文件类型指针fp,位移量,起始点); |
函数功能:把与fp有关的文件位置指针放到一个指定位置。
其中,“位移量”是long型数据,它表示位置指针相对于“起始点”移动的字节数。如果位移量是一个正数,表示从“起始点”开始往文件尾方向移动;如果位移量是一个负数,则表示从“起始点”开始往文件头方向移动。
“起始点”不能任意设定,它只能是在stdio.h中定义的三个符号常量之一:
起始点 | 对应的数字 | 代表的文件位置 |
SEEK_SET | 0 | 文件开头 |
SEEK_CUR | 1 | 文件当前位置 |
SEEK_END | 2 | 文件末尾 |
例如:
fseek(fp,50L,0);或fseek(fp,50L,SEEK_SET);
其作用是将位置指针移到离文件头50个字节处。
成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
fseek position the file(文件) position(位置) pointer(
指针) for the file referenced by stream to the byte location calculated by offset.
fread()
size_t fread ( void *
buffer
, size_t
size
, size_t
count
, FILE *
stream
) ;
参 数
buffer
size
要读写的字节数,单位是
字节
count
要进行读写多少个size字节的数据项,每个元素是size字节.
stream
输入流
返回值
实际读取的元素个数.如果返回值与
count不相同,则可能文件结尾或发生错误.
从ferror和feof获取错误信息或检测是否到达文件结尾.
fwrite
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
返回值:返回实际写入的
数据块数目
(1)buffer:是一个
指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的
数据项的个数;
(4)stream:目标
文件指针;
(5)返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。