Функция
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
в командной строке компилятора.