這比您想象的要困難得多。
您需要了解終端是如何工作的 - 他們使用特殊的控制序列用於移動光標或顏色輸出。這由終端特定的terminfo文件來描述。 Ncurses
使用terminfo將API調用(例如,將光標移動到某個位置)轉換爲此類控制序列。
由於終端(時下xterm
,gnome-terminal
,screen
,tmux
等)是在客戶端,則必須從客戶機到服務器的通過終端的類型。這就是爲什麼例如ssh
將此信息從ssh客戶端傳遞到服務器(在您的ssh會話中嘗試echo $TERM
- 如果您通過控制檯登錄,則可能是'linux',如果您使用X和xterm,則可能'xterm')。另外,您最好在服務器上提供各自的terminfo。
另一塊難題是僞終端。由於目前相對較少的人使用串行終端,因此它們的語義被仿真,使得最初爲串行控制檯開發的應用程序和庫(例如curses
及其朋友)繼續工作。這是通過僞終端實現的 - 這些就像管道,一個主設備和一個從設備進行通信,一端寫入的任何內容都會在另一端傳出。例如,對於登錄過程,getty
可以只使用一個pty設備的一端,並認爲它是一個串行線路 - 您的服務器程序必須處理pty的另一端,將它從pty獲得的所有內容發送到您的客戶端通過網絡。
終端模擬器也使用的pty,類型tty
到你的終端,如果您使用的是終端仿真器,你會得到這樣的/dev/pts/9
。在pty的另一面,它通常是你的shell,通過pty與你的終端模擬器進行通信。
您的客戶程序可以或多或少地使用標準輸入和標準輸出。如果您的終端信息是正確的,其餘的將由您的終端仿真程序處理,只需將您從服務器程序收到的任何內容傳遞給stdout
,並將您從stdin
讀取的任何內容發送到您的服務器程序。
希望我沒有遺漏任何重要的細節。祝你好運!
來源
2013-05-06 22:00:57
ldx