代码之家  ›  专栏  ›  技术社区  ›  polslinux

打印传输过程中的百分比

  •  0
  • polslinux  · 技术社区  · 12 年前

    这段代码是我开发的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 在传输结束时而不是立即打印这些值。

    如何开发更好的代码?

    2 回复  |  直到 12 年前
        1
  •  4
  •   Sean Bright Sean Stinehour    12 年前
    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);
    }
    
        2
  •  1
  •   karlphillip    12 年前

    您可以使用 网络资源 以下为: How to Create a WGet Like Command Line Progress Bar