- ベストアンサー
bashの標準出力のリダイレクトのタイミング
CentOS上でC言語でプログラムを作成し、printfで計算結果を表示させています。 具体的には一回の試行ごとにprintfで表示させ、それを数百回繰り返すプログラムです。 これをbashの標準出力のリダイレクトを用いてファイルに書き出そうとしているのですが、結果が一回の試行ごとにファイルに書き出されません。数時間待ってみると数回の試行の結果がまとめて書き込まれているので、インターバルがあるのかと考えたのですが、リダイレクトされるタイミングの設定は変更可能ですか? 入力したコマンドは hogehoge > fuga.csv & です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C コードで setvbuf() するか stdbuf が使えるなら stdbuf -o 0 hogehoge > fuga.csv & 行バッファリングでもいいなら -o L
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.3
bashは関係なくてC標準ライブラリの方でバッファリングされていることが原因です。 ですので#2の方の書かれている方法や、printf()で出力する毎にfflush(stdout)する事で対応してください。
質問者
お礼
C標準ライブラリのバッファの問題なのですね。 無事解決しました。ありがとうございました。
- kawais070
- ベストアンサー率52% (2242/4283)
回答No.1
> インターバルがあるのかと考えたのですが 確信は無いけど、インターバルじゃなくてキャッシュが効いてるのじゃないかと思います。 キャッシュにある程度溜まったらリダイレクト先に出力されるという感じ。 C言語なら、fflush関数とかでキャッシュを強制的に吐き出させるようにプログラミングすれば変化があるかも。
質問者
お礼
ご推察の通り、バッファの問題でした。 ありがとうございました。
お礼
回答ありがとうございます。 stdbufでバッファリングをなしにしたところ、即時出力されるようになりました。 ありがとうございました。