9 我可以cat做为一个非常简单的文本编辑器cat > foo.txt。 如果我输入: bar baz 然后按ctrl+ D,现在看起来像这样: $ cat > foo.txt bar baz^D 光标放在^。如果再按一次,该文件将被保存。但是,如果我按其他任何键(可以,也许什么也不是,但大多数都可以),我将继续编辑文件。 这是正常行为吗? bash keyboard-shortcuts cat — 蒂洛 source
13 是。它与^D实际操作有关:它只是停止当前read(2)呼叫。 如果程序确实这样做,int rdbytes = read(fd, buffer, sizeof buffer);并且您在^D中间按一下,则read()返回缓冲区中当前读取的字节,并返回其编号。线路端接也是如此。将\n在年底总是交付。 因此,只有a ^D在行的开头或之后^D才具有read()return 的预期效果,从而表示0EOF。 — g source 这取决于您要定义的行的内容(带或不带尾随\n..,但可以^D连续两次按,并导致EOF条件,而不会生成最终的换行符(如在执行此^D操作之前按Enter键)。 — Peter.O 2011年 您是对的,我忘了提到:行的开头和“刚按下^ D”是缓冲区为空的两种情况,因此^ D将具有read()return 0,表示EOF。 — glglgl
11 是的,这是正常现象。通常,单个Control-D仅在该行的开头才出现。这用一个Control-D退出: $ cat > foo.txt bar baz ^D — 克洛克斯 source 控制-d两次在一行的末尾没有打出来,没有一个换行符字符... — Peter.O 你是对的。我不是要暗示其他意思。我编辑了答案以弄清楚。 — Klox
\n
..,但可以^D
连续两次按,并导致EOF条件,而不会生成最终的换行符(如在执行此^D
操作之前按Enter键)。