写入文件在关闭前不可见; fflush(stdout)无效

时间:2014-06-07 22:32:51

标签: c file sleep

我在写入文件时遇到一些问题,同时在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);行时,它会正确打印。我已经搜索了这个,但我发现它需要刷新,但我这样做(虽然显然不正确)。我做错了什么?

1 个答案:

答案 0 :(得分:8)

你正在冲洗stdout。您需要刷新文件。

更改

fflush(stdout)

fflush(fp)

就sleep()出现的原因而言,影响内容在文件中是否可见:如果没有它,您将以更高的速率写入文件,所以你填充内存缓冲区并更快地刷新到磁盘。但是,如果你足够耐心,即使存在sleep(),你也会看到磁盘上的内容。