GNU/Linux >> Linux の 問題 >  >> Linux

Stdoutバッファリングを削除するための`unbuffer`または`stdbuf`?

unbuffer(1)とstdbuf(1)に違いはありますか?私が収集したものから、unbufferは、最初にlibc関数set(X)bufを呼び出してから、物事をそのままにするという「最善の努力」以上のものを作成しますか?

承認された回答:

それらは完全に異なる方法で機能します。

プログラムunbufferは、expectを使用して名前付きコマンドを実行します。 expectは子プロセスのstdoutにアタッチする疑似ttyを作成するため、子はブロックバッファリングの代わりにラインバッファリングを使用する必要があると騙されて考える可能性があります。 isatty(stdout)が真の場合、一部のプログラムは動作を変更しますが、他のプログラムは変更せず、どちらが変更され、どちらが変更されないかを判断するのは非常に困難です。

プログラムstdbufは、動的にロードされたバイナリーのlibcの前にlibstdbufを配置しようとします。ここで、libstdbufは、libcs​​tdio呼び出しのデフォルトのバッファリング戦略を再定義します。

私はこれを見つけました

 apt-get source expect coreutils

各プログラムに関連するソースを読みます。


Linux
  1. AnsibleのYAMLを理解する

  2. 初心者向けのYAML

  3. コマンドの標準をT秒間破棄しますか?

  1. コマンドラインユーティリティのファイル名としてstdoutを渡しますか?

  2. Linux で複数のファイルのファイル名の一部を削除する

  3. Linuxファイル記述子0 1 2がstdin、stdout、およびstderrではない可能性はありますか?

  1. &を使用してバックグラウンドで実行すると、Python スクリプトの Nohup が機能しない

  2. cd - cp または mv に相当するものはありますか?

  3. nm が /lib/i386-linux-gnu/libc.so.6 のシンボルを表示しないのはなぜですか?