1、FILE
FILE是一个结构体,记录了文件的相关信息,其在stdio.h中定义如下:
struct _iobuf
{
char*_ptr;
int _cnt;
char*_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char*_tmpfname;
};
typedef struct _iobuf FILE;
2、EOF
EOF在stdio.h中被定义为-1,只是一个返回值,当fgetc()等函数遇到错误或者遇到文件尾时都会返回此值,因此不能凭此返回值判断是否遇到了文件尾。判断是否遇到文件尾的正确做法是使用feof函数。
3、feof函数
声明在stdio.h中,函数原型为:int feof(FILE *stream)
其作用是判断文件当前指针所指的位置是否为文件尾(假如文件最后一个字符的指针为p,则p+1的位置就会被判定为文件尾),是则返回非零值,否则返回零值。
4、fgetc函数
声明在stdio.h中, 函数原型为:int fgetc(FILE * stream)
其作用是获取文件当前指针所指向的字符,若成功则将文件当前指针向后移动一个字节以指向新字符,并返回刚刚获取到的字符;若失败或者文件当前指针指向文件尾,则返回EOF(-1)。
5、fgets函数
声明在stdio.h中, 函数原型为:char *fgets(char *buf, int bufsize, FILE *stream)
其作用是读取从文件当前指针所指字符开始的bufsize-1个字符,并在末尾添加一个‘0’后拷贝到buf中,最后将文件当前指针指向下一个未读的新字符。但若未读满bufsize-1个字符前遇到了换行符(特指Unix下的换行符‘\n’)或者文件尾,则结束此次读取,后续操作一样(‘\n’不会被丢弃,也会被拷贝到buf中,文件指针会指向‘\n’后的新字符;但若是文件尾,则文件指针就指向文件尾,会使下次读取返回NULL)。这里的bufsize就是buf的大小。若成功则返回buf,若失败或者读取的第一个字符就是文件尾则返回NULL。
6、fseek函数
声明在stdio.h中,函数原型为:int fseek(FILE *stream, long offset, int fromwhere)
其作用是将文件当前指针重新指向从fromwhere偏移offset个字节的地方。成功返回0,失败返回-1。
其中offset为正值则向后偏移,为负值则向前偏移。fromwhere值及其含义为:
SEEK_SET(0): 文件开头
SEEK_CUR(1): 当前位置
SEEK_END(2): 文件结尾