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 件のコメント:
コメントを投稿