如果我在输入结束时按下C-d
,输入似乎被刷新,但没有EOF
发送到程序。但是,如果我再按C-d
一次,EOF
则发送。
为什么我第一次按 EOF 没有发送C-d
?这种行为记录在哪里?
为了试验自己玩cat
,这里有一个例子:
$ cat
abc<C-d>abc<C-d>
$
C-d
是传输结束 (EOT) 字符:
在 Unix 中,文件结尾字符(默认为 EOT)导致终端驱动程序立即使其输入缓冲区中的所有字符可用;通常,驱动程序会收集字符,直到它看到一个行尾字符。如果输入缓冲区为空(因为自最后一个行尾或文件尾以来没有输入任何字符),则从终端读取的程序读取的字节数为零。在 Unix 中,这种情况被理解为已到达文件末尾。
在您的示例中,当您运行cat
并键入几个字符后跟 时C-d
,键入到该点的字符将被发送到将cat
它们打印到屏幕上。现在输入缓冲区是空的,所以当您C-d
再次键入时,cat
从缓冲区读取零字节并终止,因为已满足文件结束条件。