rpmのvオプションをつけた時やyumの出力等で見かける,同じラインで進捗状況を出力する機能.コマンドラインユーティリティを作る際は遅かれ早かれ必要になることも多いはず.個人的には多いのでいちおうメモということで.
ちなみにC++と題してはいるがこの方法は他の言語でも使えるはず.
コード
肝心なポイントは \r(キャリッジリターン)だけを表示すること,そしてバッファをマニュアルでフラッシュすること.少なくともgnu g++のcoutは改行をしないとバッファを標準出力にフラッシュしない.
#include <iostream>
#include <unistd.h>
#include <cstdlib>
using namespace std;
int main() {
string progress = "progress..";
cout << "starting.." << endl;
for( int i = 0;i < 10;i++ ) {
progress += "#";
cout << progress << "\r" << flush;
sleep( 1 );
}
cout << endl << "done." << endl;
return EXIT_SUCCESS;
}
0 件のコメント:
コメントを投稿