2012-11-26 59 views
0

Ubuntu Linux:如何獲取一個指向僞終端對的
的主端的路徑?......從端很容易......但主控方似乎只是以打開的文件描述符的形式存在,但似乎不具備有效的Linux路徑。對多個調試終端使用linux僞終端API

關於工作的Linux僞終端例如http://www.man7.org/tlpi/code/online/all_files_by_chapter.html#ch64 包括在本非常好的LIUNX API本書的最後一章:http://www.nostarch.com/tlpi

有關Linux的Linux僞終端API的當前狀態的問題。上面提到的例子,根據需要將fork/exec'ed程序的stdin/stdout/stderr流重定向到PTY slave ...在PTY的那邊都很高興。

但是,我需要將作爲參數傳遞給多選項卡式終端仿真程序的僞終端主路徑似乎還不存在。

我的問題是關於爲僞終端對的主端創建一條命名路徑......盡我所能,在上面提到的示例代碼中,只有PTY從端實際上有一個名稱,如PTY Master方只通過一個打開的文件描述符來引用......並且當我通過「readlink(」/ dev/fd/3「...)查詢主方路徑時,它返回PTY master克隆路徑「/ dev/ptmx」,因此我認爲PTY Master方可能還沒有路徑名稱?我想我可能需要通過調用link()來創建一個有效的路徑....但鏈接()只需要一個現有的路徑,而不是一個打開的文件描述符作爲它的參數?...所以我試圖調用鏈接(「/ dev/ptmx」,NewPTM_name)轉向PTY cloan設備希望它可能創建一個鏈接由此產生的PTY主方,但該呼叫失敗,返回-1。

我想那麼這PTY Master端路徑字符串參數傳遞給終端仿真器,也許它的方式是命令行,或在RoxTerm的情況下的可能的DBus ...

我意識到很多終端仿真程序都有一個-e或-x參數,允許在終端窗口內運行一個程序......不幸的是,採用這種方法不會讓一個人對父/子進程樹有很大的控制權......這就要求這樣做工作是支持共享內存多處理系統。

+0

爲什麼你想通過主邊路徑作爲參數?你能展示一些你正在努力工作的代碼嗎? –

+0

是的,我可以發佈代碼,但是我的問題比這個更基本,我提到的書中的示例代碼已經完整記錄。我認爲期望Linux PTY API能夠提供一種方式來引用運行程序之外的PTY的兩端是合理的。在這種特殊情況下,我需要構建一個適合形狀的Linux進程樹我的多處理問題.. –

+0

讓我再問一遍。爲什麼你想通過主邊路徑作爲參數?是因爲你想寫一些難以表達的代碼嗎?如果是這樣,這個代碼應該做什麼?多刀終端仿真器存在並且工作得相當好。你想擴展他們的功能嗎?用什麼功能? –

回答

0

由於僞終端接口的主端只能用作打開的文件描述符,所以Liunx僞終端API的當前狀態並不能使魯棒的將主端Linux PTY路徑傳遞給終端仿真程序... ..但是PTY接口的從屬端確實擁有一個可以作爲參數在程序之間傳遞的路徑名..正如nm建議的那樣。我們可以解決這個接口限制,即如何將程序的stdio互連到終端仿真窗口中的新選項卡....通過請求DBus終端仿真程序創建一個新的(命名的)終端選項卡並返回作爲該DBus調用的結果相關聯的從端路徑..
..這導致此問題跟在問題 「如何:C++,DBus調用終端仿真程序創建新終端,返回從屬PTY」