ทำไมฉันถึงได้รับ Hangups
คุณไม่ได้รับ "Hangups" จากcat(1)
และtail(1)
พวกเขากำลังปิดกั้นการอ่าน cat(1)
รออินพุตและพิมพ์ออกมาทันทีที่เห็นบรรทัดสมบูรณ์:
$ cat /dev/stdout
foo
foo
bar
bar
นี่ฉันพิมพ์-foo
Enterbar
EnterCTRLD
tail(1)
รออินพุตและพิมพ์เฉพาะเมื่อตรวจพบได้EOF
:
$ tail /dev/stdout
foo
bar
foo
bar
นี่ฉันพิมพ์อีกครั้ง-foo
Enterbar
EnterCTRLD
หรือข้อความผิดพลาด
เป็นกลุ่มเดียวที่ให้ข้อผิดพลาด มันทำอย่างนั้นเพราะมันวิ่ง 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