我有下面的代码
#include <stdio.h>
int main(){
int i=0;
for(i=0; i<1000; i++) {
int count2 = 2;
test_val(count2);
sleep(1);
printf("zzz..\n");
}
return 1;
}
int test_val(count)
{
FILE *p;
p = fopen("test.txt", "ab");
if(p == NULL)
{
printf("Unable to open file!");
return 0;
}
fprintf(p, "count is %d\n", count);
return 1;
}我用"test“的名字编译了这个函数,使用这个函数,它将打印2到1000次。如果此函数运行正确,它会将所有内容放入test.txt中。但是,如果我在迭代过程中(假设我已经运行了500次迭代),我运行kill-9测试(或ctrl+c),它将终止程序。
我以为一开始我会在test.txt中得到至少500次"count is 2“的打印(直到我发送了一个kill信号),但实际上并非如此。如果我等到程序结束,然后打印"count is 2.实际发生了什么?
我需要做一个程序,它可以在迭代过程中取消,并且仍然可以打印到文本中kill execution之前的最新迭代。
感谢您的回复
谢谢
发布于 2012-01-22 20:09:23
stdio I/O函数是缓冲的,C库保留一个缓冲区,并在某些情况下刷新它。您可以使用fflush()显式刷新输出缓冲区。fclose()在关闭文件之前执行隐式刷新。
发布于 2012-01-22 20:08:00
您应该将fclose(p)放在test_val()的末尾。
https://stackoverflow.com/questions/8960875
复制相似问题