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

京东自营,扫码进入

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

C++零基础程序设计 C语言从入门到精通 编程入门零基础自学C语言程序设计编程游戏书 计算机程序数据基础教程书籍
C++零基础程序设计 C语言从入门到精通 编程入门零基础自学C语言程序设计编程游戏书 计算机程序数据基础教程书籍
畅销20余年的C++编程入门教程 全面更新 | 月销量700件
优惠价44.5元
原价¥89

淘口令:

¥nvvx2PcrTbh¥
 

大体思路是:

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

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

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

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

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

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

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

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

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

下载结果正确。

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片