Control + D 是用户与您视为标准输入的伪文件之间的一段通信。这并不意味着具体的“文件结尾”,而是更一般地说“刷新我到目前为止输入的输入”。刷新意味着在程序中对标准输入的任何 read() 调用都会返回自上次刷新以来输入的输入长度。如果该行不为空,则输入对您的程序可用,尽管用户尚未键入“return”。如果该行为空,则 read() 返回零,这被解释为“文件结尾”。
因此,当使用 Control + D 结束程序时,它仅在行首起作用,或者如果您执行两次(第一次刷新,第二次 read() 返回零)。
试试看:
$ cat
foo
(type Control-D once)
foofoo (read has returned "foo")
(type Control-D again)
$
正如其他人已经说过的那样,要处理
Control
+D
,请处理“文件结尾”。Control
+D
是用户与您视为标准输入的伪文件之间的一段通信。这并不意味着具体的“文件结尾”,而是更一般地说“刷新我到目前为止输入的输入”。刷新意味着在程序中对标准输入的任何read()
调用都会返回自上次刷新以来输入的输入长度。如果该行不为空,则输入对您的程序可用,尽管用户尚未键入“return”。如果该行为空,则read()
返回零,这被解释为“文件结尾”。因此,当使用
Control
+D
结束程序时,它仅在行首起作用,或者如果您执行两次(第一次刷新,第二次read()
返回零)。试试看: