stdoutバッファを削除するには、「unbuffer」または「stdbuf」を使用しますか?

stdoutバッファを削除するには、「unbuffer」または「stdbuf」を使用しますか?

unbuffer(1) と stdbuf(1) に違いはありますか?私が知っている限り、unbufferは最初にlibc関数set(X)bufを呼び出してからそのままにする以上の機能を実行します。

ベストアンサー1

彼らはまったく異なる方法で動作します。

unbuffer プログラムは、指定されたコマンドを実行するために使用します。 Expectは子プロセスのstdoutに接続するために擬似ttyを生成するので、子プロセスはブロックバッファリングの代わりにラインバッファリングを使用する必要があると思うように欺くことができます。一部のプログラムはisatty(stdout)がtrueのときに動作を変更しますが、他のプログラムはそうではなく、どのプログラムが変更され、どのプログラムが変更されないかを知ることは困難です。

動的にロードされたバイナリの場合、stdbufプログラムはlibstdbufをlibcの前に配置しようとします。そのうち、libstdbuf は libc stdio 呼び出しの基本的なバッファリング戦略を上書きします。

私はこれを見つけました

 apt-get source expect coreutils

そして、各プログラムの関連ソースコードを読んでください。

おすすめ記事