2011-12-26 33 views
2

我有一個pty的主結束的文件描述符。這個pty被庫(libvte)用來產生並運行子進程。如何讀取到達PTY主端的數據副本?

  • 我可以輪詢和讀取文件描述符或其副本,但數據永遠不會到達庫。

  • 我可以輪詢並從文件描述符中讀取,然後將其寫回主服務器,但隨後我進入一個令人討厭的循環,讀取自己的數據,並且沒有任何內容通過底層庫。

有什麼解決方案讓我讀取數據的副本,而不會干擾pty的底層功能嗎?

我正在使用Python,但我不認爲它真的在這個級別上很重要。

+0

你有一些代碼可以分享嗎? – jcollado 2011-12-26 23:07:36

+0

import vte; t = vte.Terminal(); fd = t.get_pty(); #現在讀取從fd – 2011-12-27 00:23:41

回答

1

看看我pypty程序 - 這是在/ usr/bin中/腳本與一些額外的功能,一個Python重新實現,所以它在Python演示PTY通信的兩端:

BTW,謹防與信號(相對而言)裸體系統調用 - 它們可能會在部分完成時返回。尤其請參閱maybe_restarted_syscall函數。只需調整窗口大小就會在使用PTY時導致信號傳遞。

+0

感謝這很酷,但我不知道它回答我的問題,我只有一個FD讀取和寫入,從標準輸入讀取,並寫入標準輸出(同時也寫入另一個文件)。既然你比我更專業,我希望我錯了,但請解釋一下。 – 2011-12-27 00:22:12

相關問題