stdout
glibcがと同じバッファを使用するように強制できますかstderr
?
2つの出力が出る場合tee
:
./tests/tests 2>&1 | tee log
混合メッセージが表示されます(つまり、メッセージは内部的に並べ替えられますが、stdout
互いにstderr
並べ替えられません)。バッファリングをオフにできます。
stdbuf -i0 -o0 -e0 ./tests/tests 2>&1 | tee log
ただし、これにより膨大な速度低下が発生します(数百MBのログをプッシュしています)。バッファリングは可能ですが、stdout
との間で共有できますかstderr
? FD1
と2
同じ出力を指します(例に示すように)。
ベストアンサー1
どのような場合にバッファを同じにしたいのかわかりませんが、Cプログラムでは、作成者はライブラリ関数系列を使用してバッファsetbuf()
に同じです。stderr
stdout
setbuf
シェルを使用して別のプログラムを呼び出すだけです。関数系列が暗示する理由(インスタンス固有のメモリ(バッファ)の実装と保持)のため、これを実行できないようです。プログラムが特定の方法で作成されていない場合、つまりバッファーがおよびと同じメモリーブロックに設定されていない場合、シェルはプログラムに共通のバッファリングを実行させることはできません。FILE *stderr
FILE *stdout
stdout
stderr