【发布时间】:2012-09-25 19:42:04
【问题描述】:
这段代码是我开发的一个 FTP 客户端的一部分:
for(size_to_receive = file_size; size_to_receive > 0;){
nread = read(f_sockd, filebuffer, size_to_receive);
if(nread < 0){
perror("read error on retr");
close(fd);
return -1;
}
if(write(fd, filebuffer, nread) != nread){
perror("write error on retr");
close(fd);
return -1;
}
size_to_receive -= nread;
}
我想实现下载文件的百分比,但我有一些问题。我试过这种方法:
for(size_to_receive = file_size; size_to_receive > 0;){
nread = read(f_sockd, filebuffer, size_to_receive);
tx += nread;
printf("%d%%\n", (tx * 100 / file_size));
fflush(NULL);
if(nread < 0){
perror("read error on retr");
close(fd);
return -1;
}
if(write(fd, filebuffer, nread) != nread){
perror("write error on retr");
close(fd);
return -1;
}
size_to_receive -= nread;
}
但我不喜欢它,因为当传输开始时,会立即打印“20%”,还因为如果我从 20%%\n - 40%%\n 等中删除 \n,这些值将打印在传输结束,而不是立即结束。
如何开发更好的代码?
【问题讨论】:
-
Show progress indicator 的可能重复项
标签: c progress percentage