2013-05-23 9 views
8

これはおそらく愚かな質問ですが、間違っていることはわかりません。出力リダイレクションで空のファイルが生成される

./arのように呼び出されたときに出力を生成するプログラムを実行しています。出力は次のようになります。

-0.00781 0.02344 0.98828               
-0.01172 0.02734 0.98828               
-0.01562 0.02344 0.98047               
-0.00781 0.02344 1.00000               
-0.00391 0.02344 0.98438 

毎秒新しい出力ラインが書き込まれます。

./ar > logのようなコードを呼び出し、数秒後にctrl-cを使用してプログラムを終了すると、ファイルlogは空です。

私はこのコードを組み込みシステムで実行しています。システムには、実行中のパーティションである書き込み可能なパーティションがあり、rootとしてログインしているときに書き込みアクセス権を持っています。

+10

リダイレクトすると、出力はブロックバッファで、ラインバッファではありません。ブロックが一杯になる前にCtrl-Cを押すと、何もファイルに書き込まれません。 'fflush(stdout)'を使うとすぐにファイルに書き込むことができます。 –

+0

ありがとう、私の問題を修正した、私はすべてのprintfステートメントの前にこの行を実行しなければならなかった。 – James

+3

'printf'がより自然なものになった後に実行します。 –

答えて

-1

理由は、UNIXシステムの遅延書き込みの概念です。

+0

あなたの出力をリダイレクトしてプロセスを終了すると、出力がまだ準備されていないことを意味します。パイプ操作は、最初のプロセスの出力が準備完了のときにのみ、次のプロセスに出力を転送します。 –

1

./arを呼び出して標準出力を確認していますか?それは標準エラーかもしれません。 したがって、./ar> log 2> errを実行して、stdout用とstderr用の2つのファイルを作成してください。

または./ar 2> &>ログを使用して、両方のストリームに対して1つのファイルを取得します。

関連する問題