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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,880评论 0 27
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,989评论 1 13
  • 清晨 十字路口 你往东,我往西 红灯 忽明,忽灭 行人形色匆匆 急切的奔走 你往南,我往北 每条路都有它的精彩之处...
    淡水云烟2017阅读 287评论 0 1
  • 10月11日 久违的阳光和煦清晨升起。晨跑两圈后开始了一天的工作,而此时的我刚刚结束了一节瑜伽冥想课后,怀着喜悦的...
    颖默阅读 124评论 0 1
  • 政府,是个什么东东? 作者 佚名 元人 多年前初游欧洲,满目新鲜,但印象最深的却是两件小事。一件是老人过马路...
    牧云元人阅读 904评论 0 1