在Linux中使用ferror()函数和feof()函数判断文件是否读取成功,或者读取指针是否到达了文件末尾?
函数 | 用途 | 常见场景 |
---|---|---|
ferror() | 检测文件流是否发生错误 | 文件写入失败、读取异常 |
feof() | 检测文件流是否到达文件末尾 | 逐字符/逐块读取到文件结尾 |
1. ferror()
函数
作用:检测文件流是否发生了读写错误(如磁盘损坏、权限不足等)。
返回值:
-
非零值:表示发生错误。
-
0:无错误。
2. feof()
函数
作用:检测文件流是否到达了文件末尾(End-of-File, EOF)。
返回值:
-
非零值:已到达文件末尾。
-
0:未到达末尾。
示例代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>FILE *f = NULL;
int ret;
char buf[128] = {0};int main(void)
{f = fopen("./test.txt","r+");if (NULL == f){perror("fopen error");return 1;}ret = fwrite("hello world",1,11,f);if ( ret < 11){perror("fwrite error");fclose(f);return 1;}ret == fseek(f,0,SEEK_SET);if (-1 == ret){perror(" fseek error");fclose(f);return 1;}ret == fread(buf,1,11,f);if (11 > ret){if (ferror(f)){printf("fread error\n");fclose(f);return 1;}else{if(feof(f)) {printf("fread end-of-file");fclose(f);return 1;}}clearerr(f);}printf("fread %s\n",buf);fclose(f);return 0;
}
运行结果: