今ちょうど方法を学び始めました。すべてがファイルです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
foo
Enterbar
EnterCTRL私は-hereと入力しますD。
tail(1)
入力を待って検出された場合にのみ印刷しますEOF
。
$ tail /dev/stdout
foo
bar
foo
bar
foo
Enterbar
EnterCTRLここに - を再入力します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