• ベストアンサー

bashの標準出力のリダイレクトのタイミング

CentOS上でC言語でプログラムを作成し、printfで計算結果を表示させています。 具体的には一回の試行ごとにprintfで表示させ、それを数百回繰り返すプログラムです。 これをbashの標準出力のリダイレクトを用いてファイルに書き出そうとしているのですが、結果が一回の試行ごとにファイルに書き出されません。数時間待ってみると数回の試行の結果がまとめて書き込まれているので、インターバルがあるのかと考えたのですが、リダイレクトされるタイミングの設定は変更可能ですか? 入力したコマンドは hogehoge > fuga.csv & です。

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

C コードで setvbuf() するか stdbuf が使えるなら stdbuf -o 0 hogehoge > fuga.csv & 行バッファリングでもいいなら -o L

mikimouse2100
質問者

お礼

回答ありがとうございます。 stdbufでバッファリングをなしにしたところ、即時出力されるようになりました。 ありがとうございました。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

bashは関係なくてC標準ライブラリの方でバッファリングされていることが原因です。 ですので#2の方の書かれている方法や、printf()で出力する毎にfflush(stdout)する事で対応してください。

mikimouse2100
質問者

お礼

C標準ライブラリのバッファの問題なのですね。 無事解決しました。ありがとうございました。

  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.1

> インターバルがあるのかと考えたのですが 確信は無いけど、インターバルじゃなくてキャッシュが効いてるのじゃないかと思います。 キャッシュにある程度溜まったらリダイレクト先に出力されるという感じ。 C言語なら、fflush関数とかでキャッシュを強制的に吐き出させるようにプログラミングすれば変化があるかも。

mikimouse2100
質問者

お礼

ご推察の通り、バッファの問題でした。 ありがとうございました。

関連するQ&A