为什么需要按两次 ^D 才能退出 `cat`?

为什么需要按两次 ^D 才能退出 `cat`?

让我们运行cat然后输入athen ^D- 你会看到它cat没有退出。

cat与+ a+ Enter+进行比较^D- 现在猫确实退出了。

那么,为什么在第一种情况下^D需要按两次才能退出,而在第二种情况下只需按一次呢?cat^D

答案1

答案可以在termios(3)手册页中找到:

   VEOF   (004, EOT, Ctrl-D) End-of-file character (EOF).  More precisely:
          this character causes the pending tty buffer to be sent  to  the
          waiting  user program without waiting for end-of-line.  If it is
          the first character of the line, the read(2) in the user program
          returns  0, which signifies end-of-file.  Recognized when ICANON
          is set, and then not passed as input.

您按下的第一个键^D会将您键入的行传送到cat,因此它会得到read(2)结果a(一个字符,无 EOL 字符)。第二个^D导致read(2)返回 0,这表示 EOF 到cat

相关内容