让我们运行cat
然后输入a
then ^D
- 你会看到它cat
没有退出。
cat
与+ a
+ Enter
+进行比较^D
- 现在猫确实退出了。
那么,为什么在第一种情况下^D
需要按两次才能退出,而在第二种情况下只需按一次呢?cat
^D
答案1
答案可以在termios(3)
手册页中找到:
VEOF (004, EOT, Ctrl-D) End-of-file character (EOF). More precisely:
this character causes the pending tty buffer to be sent to the
waiting user program without waiting for end-of-line. If it is
the first character of the line, the read(2) in the user program
returns 0, which signifies end-of-file. Recognized when ICANON
is set, and then not passed as input.
您按下的第一个键^D
会将您键入的行传送到cat
,因此它会得到read(2)
结果a
(一个字符,无 EOL 字符)。第二个^D
导致read(2)
返回 0,这表示 EOF 到cat
。