奇怪的控制行为

奇怪的控制行为

我可以cat通过执行以下操作将其用作非常简单的文本编辑器cat > foo.txt
如果我然后输入:

bar
baz

然后按ctrl+ D,现在看起来像这样:

$ cat > foo.txt
bar
baz^D

将光标置于^.如果我再按一次,文件就会被保存。但是,如果我按其他任何内容(好吧,也许不是任何内容,但大部分是任何内容),我只是继续编辑文件。

这是正常行为吗?

答案1

是的。它与确实有关^D:它只是停止当前的read(2)呼叫。

如果程序这样做int rdbytes = read(fd, buffer, sizeof buffer);并且您按下^D中间键,read()则返回缓冲区中当前读取的字节,并返回它们的数量。线路终止时也会发生同样的情况;最后\n的总是被传递。

因此,只有^D在一行开头或另一行之后才^D具有read()return 0、表示 EOF 的预期效果。

答案2

是的,这是正常行为。单个 Control-D 通常仅在位于行的开头时才会中断。按一下 Control-D 即可退出:

$ cat > foo.txt
bar
baz
^D

相关内容