多线程访问同一FILE*句柄打开文件方式错误导致文件写入内容混乱

今天,在一个项目中要实现使用libcurl多线程分块下载一个大文件的功能。

【全新正版】C语言从入门到精通c语言程序设计c++电脑编程入门零基础自学轻松学计算机c语言入门软件程序员开发教程教材书籍
全新版【赠:电子书实战案例+VC6.0安装包】 | 月销量2985件
优惠价19.8元
原价¥98

淘口令:

¥Lb4dXt9eKo1¥
 

大体思路是:

1.获取服务器文件的大小;

2.根据文件大小和设定的线程数,对文件进行分块;每块建立一个块信息;

3.每块启动一个线程,下载对应块的内容;

其中,每个线程下载到部分内容后使用同一个全局的FILE*变量文件句柄,对下载的内容进行保存,文件句柄打开文件的方式为

FILE* pf = fopen( “file.data”, “ab+” );

线程会调用fseek函数定位到预期的文件位置进行fwrite写入操作。

结果,下载后的文件和原始文件进行二进制比较,内容不一致,发现把第二块的内容写到了第一块的位置。。。。

后来,将文件打开方式改为了

FILE* pf = fopen( “file.data”, “wb” );

下载结果正确。

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发
CPPKU的头像-cppku-C++库

昵称

取消
昵称表情代码图片