
答案1
重擊做過從標準輸入 (stdin)(即終端)取得輸入。
終端機可以是以下兩個之一模式:生的或者煮熟的(也稱為“字元模式”和“行模式”,術語“raw”和“cooked”主要用於 Unix 世界)(“cooked”一詞是作為雙關語引入的,與“raw”相對) )。在原始模式下,終端立即將輸入傳輸到應用程式。在cooked模式下,終端機讀取整行並提供(非常原始的)行編輯機制,並且僅當使用者按下 時才將資料傳輸到應用程式Enter。
終端以煮熟模式啟動。想要更多控制輸入的應用程式(例如 bash),在等待使用者鍵入命令時將終端設定為原始模式。
答案2
我相信終端緩衝通過鍵盤接收到的每一行文本,這樣任何具有附加到終端設備文件的文件描述符(即 fd0)的程序都不會看到該行中的任何文本,直到終端“發送”它-當您按下時會發生這種情況 Enter。
(shell 的行編輯器如何解決這個問題 - 我不確定,但他們肯定會在您點擊之前獲取文字Enter)
此外,當 shell 啟動子進程(在本例中ping
)時,它會在子進程運行時進入掛起/ wait
ing 狀態,因此即使終端沒有保留其中的文本,shell 也會忽略它,假設它是用於子進程。
所以你在螢幕上看到的文字是因為終端正在顯示它,但沒有程序捕獲它並對其執行任何操作,直到子進程退出 - 並且 shell“喚醒” - 然後文本被發送到 shell 行編輯器。