Mic*_*ine 1 c file stream fread
我是从这样的文件中读取的:
#include <stdio.h>
int main() {
FILE *fp = fopen("sorted_hits", "r+");
while(!feof(fp)) {
int item_read;
int *buffer = (int *)malloc(sizeof(int));
item_read = fread(buffer, sizeof(int), 1, fp);
if(item_read == 0) {
printf("at file %ld\n", ftell(fp));
perror("read error:");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个文件很大,我有时会收到"错误的文件描述符"错误."ftell"表示发生错误时文件位置停止.
我不知道为什么它"有时",这是正常的吗?问题出在我的代码或硬盘中吗?怎么办呢?
perror打印任何errno作为描述性字符串的内容. errno只要系统调用返回错误,就会将其设置为错误代码.但是,如果系统调用没有失败,errno则不会被修改并继续包含之前包含的内容.现在,如果fread返回0,则表示存在错误或者您到达文件末尾.在后一种情况下,errno未设置并且可能包含之前的任何随机垃圾.
因此,在这种情况下,您获得的"错误文件描述符"消息可能只意味着根本没有错误.您应该检查ferror(fp)是否发生了错误.