C++多线程

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

2017-08-31  本文已影响26人  Timing_173a

 我在做一个文件传输保存功能,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

上一篇下一篇

猜你喜欢

热点阅读