3

如果我在输入结束时按下C-d,输入似乎被刷新,但没有EOF发送到程序。但是,如果我再按C-d一次,EOF则发送。

为什么我第一次按 EOF 没有发送C-d?这种行为记录在哪里?

为了试验自己玩cat,这里有一个例子:

$ cat
abc<C-d>abc<C-d>
$
4

2 回答 2

4

C-d传输结束 (EOT) 字符

在 Unix 中,文件结尾字符(默认为 EOT)导致终端驱动程序立即使其输入缓冲区中的所有字符可用;通常,驱动程序会收集字符,直到它看到一个行尾字符。如果输入缓冲区为空(因为自最后一个行尾或文件尾以来没有输入任何字符),则从终端读取的程序读取的字节数为零。在 Unix 中,这种情况被理解为已到达文件末尾。

在您的示例中,当您运行cat并键入几个字符后跟 时C-d,键入到该点的字符将被发送到将cat它们打印到屏幕上。现在输入缓冲区是空的,所以当您C-d再次键入时,cat从缓冲区读取零字节并终止,因为已满足文件结束条件。

于 2012-12-12T12:07:47.537 回答
0

使用 bash,您可能正在使用 readline 库。

正如您要求的文档,这里是

你会看到 Ctrl-D 删除了光标下的字符,如果你继续阅读,你会发现很多很棒的快捷键!

于 2012-12-12T12:54:00.887 回答