linux下载软件编程

maosharen 2016-10-23 05:03:16

void do_write(int s,char *buf,int len)
{
int retcount;
do{
retcount = write(s,buf,len);
buf += retcount;
len -= retcount;
}while(len > 0);
}

void transmit()
{
int fd;
int sd = file_info.sd;
int read_count,read_sum = 0;
char *buf = (char*)malloc(102500);
fd = file_info.fd = open(file_info.path,O_WRONLY | O_CREAT | O_TRUNC,0666);
if(fd < 0){
printf("local file open error\n");
exit(1);
}
while(read_sum < file_info.size){//file_info.size为下载文件的大小
read_count = read(sd,buf,102400);
do_write(fd,buf,read_count);
read_sum += read_count;
}
printf("read_sum:%d\n",read_sum);
printf("file size:%d\n",file_info.size);
free(buf);
}


以上代码用于下载文件,while循环中从网络读入数据,然后写入本地。测试发现读取的数据始终比文件本来的大小多几个字节(也就是read_sum大于file_info.size),因此下载的文件无法使用,请问我哪里写错了
...全文
568 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-24
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
oyljerry 2016-10-24
  • 打赏
  • 举报
回复
file_info.size 是如何得到的,怎么知道文件大小

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧