遇到一个进程core掉后日志打印不出来的问题;html
参考以下:函数
【引用】spa
只有正常退出,才能作到flush。不然将写失败。调试
以后有百度了下中文资料,发现一样的结论。日志
“fflush库函数的做用是把文件流里的全部未写出数据马上写出。例如,你能够用这个函数来确保在试图读入一个用户响应以前,先向终端送出一个交互提示符。使用这个函数还能够确保在程序继续执行以前重要的数据都已经被写到磁盘上。有时在调试程序时,还能够用它来肯定程序是正在写数据而不是被挂起了。注意,调用fclose函数隐含执行了一次flush操做,因此没必要在fclose以前调用fflush。htm
fclose库函数关闭指定的文件流stream,使全部还没有写出的数据都写出。由于stdio库会对数据进行缓冲,因此使用fclose是很重要的。若是程序须要确保数据已经所有写出,就应该调用fclose函数。虽然当程序正常结束时,会自动对全部还打开的文件流调用fclose函数,但这样作就没有机会检查由fclose报告的错误了。与文件描述符同样,可用文件流的数目也是有限制的。这个限制由头文件stdio.h中的FOPEN_MAX常量定义,最小为8。”blog
“所谓flush一个缓冲,是指对写缓冲而言,将缓冲内的数据所有写入实际的文件,并将缓冲清空,这样能够保证文件处于最新的状态。之因此须要flush,是由于写缓冲使得文件处于一种不一样步的状态,逻辑上一些数据已经写入了文件,但实际上这些数据仍然在缓冲中,若是此时程序意外地退出(发生异常或断电等),那么缓冲里的数据将没有机会写入文件。flush能够在必定程度上避免这样的状况发生。”进程
因此说,平时咱写程序,须要谨慎和按流程来,fclose作的事情有不少,不要全期望main函数return后自动帮你close文件。由于一旦出现上述中断的情形,就会生问题。get
解决方案:同步
分析了这么多,解决方案相比也很明了了。
方案一:
在C程序中加入SIGINT响应函数,保证程序正常退出。
方案二:
在C程序中加入fflush函数,保证全部输出第一时间写入文件。
方案一才是最好的解决方案,而方案二有些hack了。
就这样。
引用地址: