c - 在传输过程中打印百分比

标签 c progress percentage

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

我怎样才能开发出更好的代码?

最佳答案

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);
}

关于c - 在传输过程中打印百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12589962/

相关文章:

c - 如何找到数组中整数和数字之间的两个最接近的差异

android - 我想要一个进度圈而不是进度对话框

Java API 向客户端返回进度

android - 有什么方法可以使用 HttpUrlConnection 正确获取上传进度

ios - 是否可以使用百分比和搜索功能从 ICY 流中获取音频

mysql - 如何查询给定固定值的值的百分比

c - 如何使用 clang 为 block 实现自定义保留释放

c - 如何为 GtkTreeView 单元格添加悬停效果

c# - 在 C# 中减去百分比

c - 如何在 GNU flex 中将 yyout 重定向到 char* 缓冲区?