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

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

大体思路是:

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

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

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

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

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

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

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

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

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

下载结果正确。

© 版权声明
THE END
喜欢就支持一下吧,技术咨询可以联系QQ407933975
点赞0
分享
评论 抢沙发