美文网首页C++多线程
Linux C 多线程写同一个文件 fwrite 问题

Linux C 多线程写同一个文件 fwrite 问题

作者: Timing_173a | 来源:发表于2017-08-31 15:14 被阅读26次

     我在做一个文件传输保存功能,c/s结构。s是多线程结构。每一包数据在一个线程中处理,比如文件总大小60K,则需在60个线程处理,每个线程用fpen(..., "w");得到FILE结构,是有序的,所以是线程1创建并打开文件,线程2(包括后面的线程,如果有的话)打开文件。
     文件包传输中添加了文件序号,我通过文件序号seq*1000 来设定文件的偏移,例如:fseek(fp,seq*1000,SEEK_SET);.通过偏移将每包数据写到相应的位置。避免C/S结构发送文件包时,包顺序发生错乱而要进行的队列操作。

    问题呈现:

     1、 文件20k,保存下来仅有2k大小。
     2、修改后之后文件大小存储正常,数据仅有最后一包正确,其他数据为0x0000.

    解决步骤:

     1、 在打开文件时,加锁,fwrite之后fclose,并释放锁。
     2、 修改文件打开的权限为fopen(fileName, "a+"),并在fwrite后使用fflush(fp)刷出流。

    分析总结:

     1、 在打开文件时,使用"w"会导致清除fp之前的内容。
     2、 在写时,使用fflush及时刷新流,

    借鉴博客:

    http://www.myexception.cn/vc-mfc/743342.html

    相关文章

      网友评论

        本文标题:Linux C 多线程写同一个文件 fwrite 问题

        本文链接:https://www.haomeiwen.com/subject/koeqjxtx.html