
stdbuf コマンドのマニュアルページには、ラインバッファリングモードが標準入力バッファリングオプションとして機能しないことが示されています。その理由は何ですか?
tail -f access.log | stdbuf -iL cut -d' ' -f1 | uniq
stdbuf: line buffering stdin is meaningless
Try `stdbuf --help' for more information.
答え1
stdbufの作成者として、「stdio入力バッファリングの問題」セクションに案内します。http://www.pixelbeat.org/programming/stdio_buffering/
答え2
簡単に言えば、stdbufはstdio機能を取り巻くラッパーです。入力ストリームのラインバッファリングはstdioで定義されていません。これが意味するものについての標準文書が見つからないので、標準に関する限り、事実上意味がありません。
stdout ラインバッファリングと同様の動作を仮定すると、stdin のラインバッファリングは、各文字読み込みに対して read() を一度呼び出す必要があります。記述子から改行文字を読み取らないことを保証する他の方法がないからです。バッファリングの目的はシステムコールの数を減らすことであるため、stdioライブラリがそれを実装しないことは驚くべきことではありません。