Вопрос по unix, stdout, stdin, tty – Как создать псевдо-tty для чтения вывода и записи на ввод

6

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

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

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

Это действительно то, для чего нужны псевдо-тты. Мне часто хочется, чтобы в Windows была аналогичная встроенная возможность. RBerteig

Ваш Ответ

3   ответа
6

#include <pty.h> /* for openpty and forkpty */

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

Link with -lutil.

The forkpty() function combines openpty(), fork(), and login_tty() to create a new process operating in a pseudo-terminal. The file descrip‐ tor of the master side of the pseudo-terminal is returned in amaster, and the filename of the slave in name if it is not NULL. The termp and winp parameters, if not NULL, will determine the terminal attributes and window size of the slave side of the pseudo-terminal.

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

forkpty () в Linux и Mac, но не, например, Солярис или AIX. Если вам нужна переносимость, POSIX определяет функции posix_openpt (), ptsname (), grantpt () и unlockpt ().
Да, это стандарт BSD, унаследованный от Linux.
1

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

1

использует язык сценариев под названием tcl (произносится как щекотка).

http://expect.nist.gov

Хотя ожидаемый веб-сайт выглядит любительским, ожидаемый существует уже много лет, поэтому он представляет собой солидный пакет.
Поскольку OP начинается с «Я использую fork () и execvp () для запуска процесса ...» Понятно, что они хотят включить эту функциональность в существующую программу, а не перезаписывать ее в TCL.

Похожие вопросы