【发布时间】:2011-09-07 17:29:18
【问题描述】:
我在 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;
}
我希望它只打印一行。 这个问题有解决办法吗?
更新: 正如下面有人回答的那样, fgets 正在缓冲文件 并在 FD 关闭后返回给我数据。 它正在缓冲 4kB 的数据。如果文件大小超过 4k, 它在读取 4KB 后得到 EOF 并且打印停止。否则,如果 文件大小小于 4k,它会打印到文件末尾。
【问题讨论】: