fputs函数之后有必要加上fflush函数。

来源:互联网 发布:提升淘宝店铺权重 编辑:程序博客网 时间:2024/05/18 20:10

     最近再弄一个项目,采集话单是其中的一个入口,而采集需要支持多个网元采集,而各个网元之间不能互相影响到。实现为多线程,当有几个网元的时候就生成几个线程,每个线程各自处理自己的采集功能,采集完文件后,需要对文件进行解码,解码后需要生成类似“|1111|2222|33333|44444|5555555|6666|"的缓冲内容,写入另外一个文件。

程序里,每次缓冲区有char lineBuf[2048]那么大。调试程序时,发现程序可以退出线程,但是退出线程后,程序却奔溃了,而发现写入的那个文件记录只写了11行半,

应该是要记录13行的,一开始,我还以为是程序代码异常,发生内存异常,看了几次代码,调试了几次都没发现。最后想了想,fputs命令是执行了13次,不过结果只写入了11行半,是不是内存缓冲区异常或者被占用清除了。于是想到fflush去刷新缓冲区,每fputs后,就刷新一下。果然,最后程序正常了,写文件也正常了。

    如果不把解码接口放入线程函数中,而放在进程里,相信是不会出现这个问题的。只不过线程跟进程空间还是有差别的。所以为了安全起见,fputs和fflush还是很有必要一起出现的。