このコードは、私が開発した 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
などを削除すると、すぐではなく転送の最後に値が出力されるため、私はそれが好きではありません。
どうすればより良いコードを開発できますか?