今天,在一个项目中要实现使用libcurl多线程分块下载一个大文件的功能。
null
大体思路是:
1.获取服务器文件的大小;
2.根据文件大小和设定的线程数,对文件进行分块;每块建立一个块信息;
3.每块启动一个线程,下载对应块的内容;
其中,每个线程下载到部分内容后使用同一个全局的FILE*变量文件句柄,对下载的内容进行保存,文件句柄打开文件的方式为
FILE* pf = fopen( “file.data”, “ab+” );
线程会调用fseek函数定位到预期的文件位置进行fwrite写入操作。
结果,下载后的文件和原始文件进行二进制比较,内容不一致,发现把第二块的内容写到了第一块的位置。。。。
后来,将文件打开方式改为了
FILE* pf = fopen( “file.data”, “wb” );
下载结果正确。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容