一部のIPでは、ping -c 4 -W 1 ip | catはpingが完了するまで何も出力しませんが、他のIPの場合は何も出力しません。

一部のIPでは、ping -c 4 -W 1 ip | catはpingが完了するまで何も出力しませんが、他のIPの場合は何も出力しません。

なぜ

$ ping -c 4 -W 1 127.0.0.1 | cat

そして

$ ping -c 4 -W 1 1.1.1.1

出力はすぐに印刷されますが、

$ ping -c 4 -W 1 1.1.1.1 | cat

4秒間何も印刷せずにすべての出力を一度に印刷しますか?

最初のコマンドは、期待どおりに成功したpingと他の2つの印刷タイムアウトを印刷します。

ベストアンサー1

シェルパイプラインへのping出力の場合、バッファリングによって異なる動作を説明できます。 pingは正常に受信された各エコーパケットを報告した後にfflush()を呼び出すため、ラインはすぐにcatに送信され、すぐに出力されます。 ping本当にいいえfflush()はタイムアウトパケットを報告する行を作成した後に呼び出されるため、stdioはpingがexit()を呼び出すまでその行をバッファリングし、すべての行をcatに送信して出力します。

端末に直接 ping 出力を行う場合、stdio ラインはデフォルトで ttys に関連付けられたストリームにすべての出力をバッファリングするので、成功および失敗出力がすぐに表示されます。したがって、各出力ラインはstdioによってバッファリングされるのではなく、ただちに端末に転送されます。

精神的に人に釣り方を教える、OS Xを読んで確認することができます。pingのソースコードそしてOS Xを読むstdio マンページ

おすすめ記事