sun*_*nil 2 c linux file-io fgets eof
我在linux上遇到了fgets()的一些问题.fgets从关闭的文件描述符返回数据.如果文件关闭,我希望它返回EOF.我能够提出我的问题的简化版本.
int main()
{
int i=0, j;
FILE *FD;
char p[128];
FD = fopen("junk", "r");
while(fgets(p, sizeof(p), FD))
{
close(fileno(FD));
printf("lineno=%d\n", i++);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望它只打印一行.这个问题有解决方法吗?
更新:正如有人在下面回答的那样,fgets正在缓冲文件并在FD关闭后返回数据.它正在缓冲4kB的数据.如果文件大小超过4k,则在读取4KB后获得EOF并且打印停止.否则如果文件大小感谢4k,它会打印到文件末尾.