なぜハングアップするのですか
cat(1)
およびから「ハングアップ」が発生しておらずtail(1)
、読み取り時にブロックされているだけです。 cat(1)
入力を待ち、完全な行が見つかるとすぐに出力します。
$ cat /dev/stdout
foo
foo
bar
bar
ここに入力しましたfoo
Enterbar
EnterCTRL- 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