Tty
為什麼需要按兩次 ^D 才能退出“cat”?
讓我們執行
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
.