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

\nしかし、転送が開始されるとすぐに「20%」が出力され、またfrom 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 に答える