c/c++语言开发共享如何使fprintf()立即写入

写入文件的一种方法是使用fprintf() 。 但是,此函数不会立即将结果写入文件。 当程序终止或完成时,它似乎立即写入所有内容。

我的问题如下:我有一个需要很长时间才能运行的程序(大数据集需要4-5个小时)。 在此期间,我希望看到中间结果,这样我就不必等待5个小时。 我的大学使用Sun Grid Engine提交作业。 正如大多数人所知,你必须等到你的工作完成才能看到你的最终结果。 因此,我希望能够将中间结果写入文本文件,并在程序处理时查看更新的结果(类似地,如果我使用的是printf )。

如何修改fprintf()以将我想要的任何内容立即写入目标文件?

    每次写入后都可以使用fflushfunction将输出缓冲区刷新到磁盘。

     fprintf(fileptr, "writing to filen"); fflush(fileptr); 

    如果您使用的是POSIX系统(即Linux,BSD等),并且您确实希望确保将文件写入磁盘,即您要刷新内核缓冲区以及用户空间缓冲区,请使用fsync

     fsync(fileno(fileptr)); 

    但是fflush应该足够了。 除非你发现需要,否则不要打扰fsync

    也许你可以设置FILE指针_IONBF模式。 然后你云不使用fflush或fsync。 FILE * pFilePointor = fopen(…); setvbuf(pFilePointor,NULL,_IONBF,0);

    fprintf(…)fprintf(…)

    fflush
    这适用于文件*。 对于您的情况,它看起来更合适。 请注意fflush(NULL)将更新所有打开的文件/流和我的CPU密集型。 出于性能原因,您可能希望使用/ avoid fflush(NULL)。

    FSYNC
    这适用于int描述符。 它不仅更新文件/流,还更新元数据。 它甚至可以在系统崩溃/重启情况下工作。 您可以查看手册页以获取更多详细信息。

    我个人使用fflush ,它对我来说很好(在Ubuntu / Linux中)。

      以上就是c/c++开发分享如何使fprintf()立即写入相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/559725.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐