0

这段代码是我开发的 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%”,而且如果我删除\nfrom 20%%\n-40%%\n等,这些值会在传输结束时打印,而不是立即打印。

如何开发更好的代码?

4

2 回答 2

4
for (size_to_receive = file_size; size_to_receive > 0;) {
    nread = read(f_sockd, filebuffer, size_to_receive);
    tmp_xc += nread;

    printf("%d%%\r", (tmp_xc * 100 / file_size));
    fflush(NULL);
}
于 2012-09-25T19:47:49.333 回答
1

您可以使用ncurses如何创建类似命令行进度条的 WGet

于 2012-09-25T19:51:15.873 回答