gpt4 book ai didi

c - 为什么这个程序的行为像 `tail -f`

转载 作者:行者123 更新时间:2023-12-04 04:48:03 24 4
gpt4 key购买 nike

int main(int argc, char *argv[])
{
int c = EOF;
FILE *fp = fopen("./temp.txt", "r");
assert(fp!=NULL);
while (1) {
c = fgetc(fp);
if (EOF != c) {
putchar(c);
}
}

return 0;
}

temp.txt 是一个缓慢增加的日志文件,所以这个程序可以读取 EOF。第一次遇到EOF后,我认为它应该停止获取temp.txt的新增数据,而它的作用就像 tail -f temp.txt并继续打印文件的新行。

是的,我知道有一个无限循环。问题是我认为,
当 fgetc 第一次遇到 EOF 时,它应该在 struct fp 中做一些记录,
并且 fgetc 的下一次调用应该检查这一点并立即返回 EOF。
为什么它继续读取磁盘上的数据,没有到达文件尾?
这是预期的行为吗?

最佳答案

快速回答是,没有break退出 while循环。

当它显示 EOF ,它绕回并按住 c = fgetc(fp); .

如果您需要它在到达 EOF 时停止读取,您可以添加 else :

while (1) {
c = fgetc(fp);
if (EOF != c) {
putchar(c);
} else {
// reached the EOF
break;
}
}

关于c - 为什么这个程序的行为像 `tail -f`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com