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