テキストエディタを使用して/dev/stdoutを読み取れないのはなぜですか?

テキストエディタを使用して/dev/stdoutを読み取れないのはなぜですか?

今ちょうど方法を学び始めました。すべてがファイルですTM on Linuxでは、/dev/stdoutをそのまま読むと何が起こるのか疑問に思います。

$ cat /dev/stdout 
^C
$ tail /dev/stdout 
^C

(これは^Cプログラムが中断された後にプログラムを終了することです。)

使用しようとすると、vim「/dev/stdout」がファイルではありませんという想像できないメッセージが表示されます。喧嘩!

それでは、これらの「ファイル」を読み取ろうとすると、途切れやエラーメッセージが表示されるのはなぜですか?

ベストアンサー1

私はなぜ電話を切る?

cat(1)とで「停止」は発生せず、読み取りのみがtail(1)ブロックされます。 cat(1)入力を待ってから行全体が表示されたら、すぐに印刷します。

$ cat /dev/stdout
foo
foo
bar
bar

fooEnterbarEnterCTRL私は-hereと入力しますD

tail(1)入力を待って検出された場合にのみ印刷しますEOF

$ tail /dev/stdout
foo
bar
foo
bar

fooEnterbarEnterCTRLここに - を再入力しますD

またはエラーメッセージ

Vimはエラーを発生させる唯一のツールです。それがその理由はそれだからです。走る stat(2)これに対応するビットが設定されていない/dev/stdoutことがわかりましたS_IFREG

/dev/stdoutファイルですが、定期的な文書。実際、カーネルにはファイルシステムにアイテムを提供するダンスがあります。 Linuxの場合:

$ ls -l /dev/stdout
lrwxrwxrwx 1 root root 15 May  8 19:42 /dev/stdout -> /proc/self/fd/1

OpenBSDから:

$ ls -l /dev/stdout
crw-rw-rw-  1 root  wheel   22,   1 May  7 09:05:03 2015 /dev/stdout

FreeBSDから:

$ ls -l /dev/stdout
lrwxr-xr-x  1 root  wheel  4 May  8 21:35 /dev/stdout -> fd/1

$ ls -l /dev/fd/1
crw-rw-rw-  1 root  wheel  0x18 May  8 21:35 /dev/fd/1

おすすめ記事