2012-02-20 58 views
4

我不必使用forkpty()創建一對新的tty(主和從)。C叉新tty

在PTS(4)的人,它被寫入的是:

當一個進程打開/ dev/ptmx設置,它得到一個僞終端主機(PTM)一個文件描述符,和一個僞終端從站(PTS)設備在/ dev/pts目錄中創建。

在C一個小程序,我打開/ dev/ptmx設置這樣的:

open("/dev/ptmx", O_RDWR); 

但在/ dev目錄下創建任何新PTY/PTS /。

+2

爲什麼不使用forkpty()?這是作業分配嗎? – Eregrith 2012-02-20 15:36:04

+2

請接受你以前的問題的一些答案(假設你發現他們有幫助)。 – 2012-02-20 17:15:06

回答

4

要實際創建一個可用的pty對,您還必須在open調用返回的fd上調用grantpt(3)和unlockpt(3)。它沒有很好地定義在那個過程中創建文件系統中實際的slave pty文件節點的位置 - 有些系統(通常是/ dev/pts是一個特殊文件系統的系統)會在打開時創建它,而另一些系統會創建它作爲授權或解鎖呼叫的一部分。它也不保證slave會在/ dev/pts中 - 它可能在別的地方 - 所以你需要調用ptsname(3)來找出它的位置。

它也可能稍微更便於調用posix_openpt(3)而不是直接打開。

+0

確實,'posix_openpt'是可移植的('/ dev/ps/ptmx'是Linux專用的,我沒有增加任何額外的值)。指令序列是:使用'posix_openpt'創建一個主文件,然後用'grantpt'授予對它的訪問權限,並將它作爲主參數,然後用'unlockpt'解鎖這對文件,然後獲取從屬文件名以便稍後打開它用'ptsname',然後打開'ptsname'用通常的'open'返回的文件名;全部如POSIX 1中所述。 – Hibou57 2013-03-28 09:48:47

+0

這裏是更多[POSIX關於'ptmx'的文字](http://pubs.opengroup.org/onlinepubs/009696899/functions/posix_openpt.html):「標準開發人員認爲添加一個克隆主僞終端的特殊設備:/ dev/ptmx設備。然而,我們並沒有達成共識,並且認爲添加一個新函數將允許其他實現。「還要注意他們是如何考慮'/ dev/ptmx'而不是Linux'/ dev/ps/ptmx' – Hibou57 2013-03-29 12:22:26