写入文件的一种方法是使用fprintf()
。 但是,此函数不会立即将结果写入文件。 当程序终止或完成时,它似乎立即写入所有内容。
我的问题如下:我有一个需要很长时间才能运行的程序(大数据集需要4-5个小时)。 在此期间,我希望看到中间结果,这样我就不必等待5个小时。 我的大学使用Sun Grid Engine
提交作业。 正如大多数人所知,你必须等到你的工作完成才能看到你的最终结果。 因此,我希望能够将中间结果写入文本文件,并在程序处理时查看更新的结果(类似地,如果我使用的是printf
)。
如何修改fprintf()
以将我想要的任何内容立即写入目标文件?
每次写入后都可以使用fflush
function将输出缓冲区刷新到磁盘。
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