用戶進程使用3個文件描述符與終端進行通信。該終端被視爲unix中的文件(例如/dev/tty
),並且還具有文件描述符,主要次要編號以供內核識別。所以內核通過終端與用戶進程通信。另一種溝通方式是通過我們都知道的系統調用。用戶進程,終端和內核之間的通信
假設用戶進程正在等待輸入(例如:enter two numbers: _ _
)。當我們按下鍵盤上的和時,鍵盤緩衝區被填滿,與鍵盤相關聯的設備驅動程序將識別它並將在其等待隊列中喚醒進程。那麼這個數據如何(即1
和2
)對用戶進程有效?這將通過終端我猜。
另外如果重定向輸出會發生什麼,例如$ ./a.out > file
?我已經使用isatty()
進行了檢查,該過程不與任何終端關聯。那麼內核將如何與用戶進程交互?假設我的程序需要鍵盤輸入。
此終端本身是由內核特殊處理。有進程組,並且組的前臺進程獲取控制檯輸入。你可以使用[屏幕](http://linux.die.net/man/1/screen)等東西給幾個程序的前景。除了終端的性質,我不明白你的問題是什麼,沒有多少重複? – 2014-09-15 14:39:20