我在写入文件时遇到一些问题,同时在while循环中也有延迟。这是一个片段:
void main(int){
FILE * fp = NULL;
sprintf(filename, "log%i.msg", SET_ID);
fp = fopen(filename, "w+");
fprintf(fp, "File started\n");
while(1){
fprintf(fp, "%i %u %s\n", someInt, someUnsigned, someString);
fflush(stdout);
sleep(5); // Commenting out this line will work
}
fclose(fp);
return 1;
}
运行代码给出了一个0字节的输出文件,虽然在我的代码完成运行时文件确实具有预期的内容,但睡眠生效时没有任何内容。但是,当我删除sleep(5);
行时,它会正确打印。我已经搜索了这个,但我发现它需要刷新,但我这样做(虽然显然不正确)。我做错了什么?
答案 0 :(得分:8)
你正在冲洗stdout。您需要刷新文件。
更改
fflush(stdout)
到
fflush(fp)
就sleep()出现的原因而言,影响内容在文件中是否可见:如果没有它,您将以更高的速率写入文件,所以你填充内存缓冲区并更快地刷新到磁盘。但是,如果你足够耐心,即使存在sleep(),你也会看到磁盘上的内容。