Tty

為什麼需要按兩次 ^D 才能退出“cat”?

  • July 9, 2017

讓我們執行cat然後輸入- 你a^D看到它cat沒有退出。

將其與cat+ a+ Enter+進行比較^D- 現在 cat 確實退出了。

那麼,為什麼在第一種情況下需要兩次^D按下才能退出,而在第二種情況下cat只需要一次?^D

答案可以在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,因此它會得到(一個字元,沒有 EOL 字元)的read(2)結果。a第二個^D原因read(2)返回 0,這表示 EOF 到cat.

引用自:https://unix.stackexchange.com/questions/377254