stdoutとstderrを同じバッファにバッファリングするように設定する

stdoutとstderrを同じバッファにバッファリングするように設定する

stdoutglibcがと同じバッファを使用するように強制できますかstderr

2つの出力が出る場合tee

./tests/tests 2>&1 | tee log

混合メッセージが表示されます(つまり、メッセージは内部的に並べ替えられますが、stdout互いにstderr並べ替えられません)。バッファリングをオフにできます。

stdbuf -i0 -o0 -e0 ./tests/tests 2>&1 | tee log

ただし、これにより膨大な速度低下が発生します(数百MBのログをプッシュしています)。バッファリングは可能ですが、stdoutとの間で共有できますかstderr? FD12同じ出力を指します(例に示すように)。

ベストアンサー1

どのような場合にバッファを同じにしたいのかわかりませんが、Cプログラムでは、作成者はライブラリ関数系列を使用してバッファsetbuf()に同じです。stderrstdout

setbufシェルを使用して別のプログラムを呼び出すだけです。関数系列が暗示する理由(インスタンス固有のメモリ(バッファ)の実装と保持)のため、これを実行できないようです。プログラムが特定の方法で作成されていない場合、つまりバッファーがおよびと同じメモリーブロックに設定されていない場合、シェルはプログラムに共通のバッファリングを実行させることはできません。FILE *stderrFILE *stdoutstdoutstderr

おすすめ記事