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

名前付きパイプ(猫または尾-f)からの連続読み取り?

rsyslogを構成しました 特定のログイベントを/dev/xconsoleに記録します :

*.*;cron.!=info;mail.!=info      |/dev/xconsole

/dev/xconsole 名前付きパイプ(fifo )。ログに記録されているものを確認したい場合は、cat /dev/xconsoleを実行できます。 。コマンドcat /dev/xconsoleを見て、私は驚いています。 ファイルを読み取った後は終了しませんが、代わりにtail -fとして機能します 。つまり、2つのコマンドは同じように動作します。

cat /dev/xconsole
tail -f /dev/xconsole

誰かがその理由を説明できますか?

2つの間に違いはありますか?

承認された回答:

cat EOFを取得するまで読み続けます。パイプは、入力でEOFを取得した場合にのみ、出力でEOFを生成します。ロギングデーモンはファイルを開いて書き込み、開いたままにします —通常のファイルの場合と同じように—したがって、EOFが出力に生成されることはありません。 cat ただ読み続け、現在パイプにあるものを使い果たすたびにブロックします。

これは手動で試すことができます:

$ mkfifo test
$ cat test

そして別のターミナルで:

$ cat > test
hello

もう一方の端子に出力されます。次に:

world

もっとあります もう一方の端子に出力します。ここでCtrl-Dを入力すると、他のcat 終了します。

この場合、cat間の唯一の観察可能な違い およびtail -f ロギングデーモンが終了または再起動された場合:cat パイプの書き込み端が閉じられると永続的に停止しますが、tail -f デーモンが再起動されても、続行(ファイルを再度開く)します。


Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  1. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

  2. /dev/zero から /dev/null への DD ...実際に何が起こるか

  3. /dev/random からの RdRand

  1. カーネル:/dev/kmem と /dev/mem を無効化

  2. Linux が /dev/tty と /dev/tty0 を使用する方法

  3. Linux で /dev/random を /dev/urandom にリンクするのは間違っていますか?