OPENPTY(3)

НАЗВАНИЕ
openpty, login_tty, forkpty - функции для работы с терминалом (tty)

СИНТАКСИС
#include <pty.h> /* для openpty и forkpty */
#include <utmp.h> /* для login_tty */

int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize * winp);

int login_tty(int fd);

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

ОПИСАНИЕ
Функция openpty() находит свободный псевдо-терминал и возвращает файловые дескрипторы для главного и подчиненного в amaster и aslave. Если name не равно NULL, имя файла подчиненного возвращается в name. Если termp не равно NULL, то параметры терминала подчиненного будут установлены в значения из termp. Если winp не равно NULL, то размер окна подчиненного будет установлен в значения из winp. Функция login_tty() подготавливает терминал fd (который может быть реальным терминальным устройством, или подчиненным псевдо-терминала, возвращенным openpty()) для входа в систему, создавая новый сеанс, делая fd управляющим терминалом для текущего процесса, устанавливая fd как стандартный поток ввода, вывода и ошибок текущего процесса, и закрывая fd. Функция forkpty() объединяет openpty(), fork(), и login_tty() для создания нового процесса, работающего в псевдо-терминале. Файловый дескриптор главной стороны псевдо-терминала возвращается в amaster, а имя файла подчиненного - в name, если только этот аргумент не равен NULL. Аргументы termp и winp, если они не равны NULL, определяют атрибуты терминала и размер окна подчиненной стороны псевдо-терминала.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Если при вызове openpty(), login_tty(), или forkpty() произошла ошибка, то возвращается -1 и устанавливается errno. В противном случае openpty(), login_tty(), и дочерний процесс forkpty() возвращают 0, а родительский процесс forkpty() возвращает идентификатор дочернего процесса.

НАЙДЕННЫЕ ОШИБКИ
openpty() возвращает ошибку

ENOENT
    нет доступных терминалов.

login_pty() возвращает ошибку если ioctl() не удалось сделать fd управляющим терминалом текущего процесса.

forkpty() возвращает ошибку, если ее вернули openpty() или fork().

ЗАМЕЧАНИЯ
Эти функции включены в libutil, поэтому необходиому указывать -lutil в командной строке компилятора.

ФАЙЛЫ
/dev/[pt]ty[pqrstuwxyzabcdePQRST][0123456789abcdef]

СООТВЕТСТВИЕ СТАНДАРТАМ
Эти функции взяты из BSD и присутствуют в libc5 и glibc2.

НАЙДЕННЫЕ ОШИБКИ
Никто не знает, сколько пространства нужно зарезервировать для name. Поэтому, вызов openpty() или forkpty() с ненулевым name может быть небезопасен.

СМ. ТАКЖЕ
fork(2)