1

Mac でバックグラウンド プロセスを実行していますが、ログの更新に問題があります。私が走れば

someprog > mylog &

その後mylog、すぐに更新されるのではなく、一定の間隔で更新されます-バッファリングが原因だと思います。と同じことat now。出力が に書き込まれる前にプログラムを強制終了するとmylog、データが失われます。Linuxマシンでは同じプログラムでそのような問題はなかったので、Macでも実行時に更新できるようにしたいと考えています. 方法はありますか?

someprog私が書いたものではないF77プログラムです。

SuperUser でこの質問をしようとしましたが、誰も助けてくれません。

EDIT1:ソースを変更する気はありませんが、覚えておいてください。ロギングは Linux マシンで正常に機能するため、Mac でも機能するはずです。バッファサイズなどのシステム設定である必要がありますか? バッファ サイズをより小さな値に制限しても問題ありません。ログに何かが表示されるまで何時間も待たなければなりません。

4

2 に答える 2

2

ソース コードにアクセスできる場合は、すべての printf の後に fflush(stdout) への呼び出しを追加するだけでよいでしょう。そうでない場合は、LD_PRELOAD でトリッキーなことを試すことができます...基本的に、libc の printf を呼び出す独自のバージョンの printf() を作成し、フラッシュを実行します...次に、実行時にそのライブラリを LD_PRELOAD します...アプリは代わりにあなたのものを使用します...ちょっと危険ですが...

于 2010-10-01T14:22:13.207 に答える
2

これは、非 tty ストリームに書き込む POSIX C プログラムの通常の動作です。F77 も同じ動作を共有しているか、stdio ルーチンに関して記述されていると思います。

正しい答えが何であるかはわかりません-出力をttyのふりをするものにパイプする必要があると思いますが、そのオプションを提供するユーティリティ(もしあれば)がわかりません。

于 2010-10-01T14:23:19.903 に答える