Как создать псевдо-tty для чтения вывода и записи на ввод - PullRequest
6 голосов
/ 30 июля 2009

Я использую fork () и execvp () для запуска процесса, который должен верить, что он подключен к интерактивному терминалу, чтобы он функционировал должным образом.

После создания я хочу захватить все выходные данные процесса, а также иметь возможность отправлять входные данные процессу.

Я подозреваю, что здесь могут помочь psuedo-ttys. У кого-нибудь есть фрагмент, как это сделать?

Ответы [ 3 ]

6 голосов
/ 30 июля 2009

Вы хотите вызвать forkpty (). Со страницы руководства:

# include / * для openpty и forkpty * /

pid_t forkpty (int * amaster, char * name, struct termios * termp, struct winsize * winp);

Ссылка с -lutil.

Функция forkpty () объединяет openpty (), fork () и login_tty () в создать новый процесс, работающий в псевдо-терминале. Описание файла тор главной стороны псевдотерминала возвращается в amaster, и имя подчиненного в имени, если оно не NULL. Терм и Параметры winp, если не NULL, будут определять атрибуты терминала и размер окна ведомой стороны псевдотерминала.

Ваш родительский процесс общается с дочерним процессом, читая и записывая из файлового дескриптора, который forkpty хранит в «amaster» - это называется главным псевдо-терминальным устройством. Ребенок просто говорит с stdin и stdout, которые подключены к ведомому псевдо-терминальному устройству.

1 голос
/ 30 июля 2009

Ожидается, что уже упоминалось для использования через Tcl, но его также можно использовать без Tcl, обрабатывая его как библиотеку C и вызывая API , задокументированный здесь

1 голос
/ 30 июля 2009

Есть пакет, который называется «ожидаем», который вы должны использовать. Он использует язык сценариев под названием tcl (произносится как тикл).

http://expect.nist.gov

...