1

たとえば、2 秒間隔で 3 行を出力する ac プログラムがあります。

  printf("Wait 2 seconds...\n");
  sleep(2);
  printf("Two more\n");
  sleep(2);
  printf("Quitting in 2 seconds...\n");
  sleep(2);

プログラムを実行し、パイプにリダイレクトします。

./printer > myPipe

別の端末で

cat < myPipe

2 番目の端末は、6 秒後にすべてを一度に印刷します。利用可能な行をすぐに印刷したいと思います。どうすればできますか?

Obs:ソース コードを変更できません。これは実際にはボードゲーム アルゴリズムの出力です。別のアルゴリズムにプラグインし、回答を取得して最初のアルゴリズムにプラグインできるように、すぐに取得する必要があります...

4

3 に答える 3

2

プログラムを次のアプローチに変更します。

  printf("Wait 2 seconds...\n");
  fflush (stdout);
  sleep(2);
  printf("Two more\n");
  fflush (stdout);
  sleep(2);
  printf("Quitting in 2 seconds...\n");
  fflush (stdout);
  sleep(2);

追加:

プログラムを変更できない場合は、プログラムをハッキングせずに、プログラムの組み込みバッファリングに影響を与える方法はありません。

プログラムを再リンクできる場合は、printf()呼び出しのたびにフラッシュする関数に置き換えることができます。または、stdoutの起動初期化をバッファなし、または少なくとも回線バッファに変更します。

于 2013-03-10T05:42:55.477 に答える
1

ソースを変更できない場合は、次の関連する質問に対する解決策をいくつか試してください: bash: force exec'd process to have unbuffered stdout

基本的には、このプログラムを対話的に OS に実行させる必要があります。

于 2013-03-10T05:46:27.267 に答える
1

実際のソース ファイルが完成していると仮定しています。その場合、ソースをコンパイルして実行し、何かを実行させる必要があります。を使用catすると、ファイルの内容が印刷され、実行されません

bash で記述されている場合は、モード ビット +x を設定する必要があります。これにより、実行可能になります。端末から実行できるようにする ./script

構文を変更するオプションではないと述べたので、構文について心配する必要はありません... Cで正しく記述されています.

于 2013-03-10T05:46:54.760 に答える