ОБЗОР
#include <pty.h>
int openpty(int *
amaster
, int *
aslave
, char *
name
,
const struct termios *
termp
,
const struct winsize *
winp
);
pid_t forkpty(int *
amaster
, char *
name
,
const struct termios *
termp
,
const struct winsize *
winp
);
#include <utmp.h>
int login_tty(int
fd
);
Компонуется при указании параметра
-lutil
.
ОПИСАНИЕ
Функция
openpty
() ищет доступный псевдотерминал и возвращает файловые
дескрипторы для его основного и подчинённого устройств в
amaster
и
aslave
. Если
name
не равно NULL, то имя файла подчинённого устройства
возвращается в
name
. Если
termp
не равно NULL, то параметры терминала
подчинённого устройства будут установлены в значения, указанные в
termp
. Если
winp
не равно NULL, то размер окна подчинённого устройства
будет установлен согласно значениям, указанным в
winp
.
Функция
login_tty
() подготавливает терминал
fd
(который может быть
реальным устройством терминала или подчинённым псевдотерминала, возвращаемым
openpty
()) таким образом, чтобы через него можно было войти в систему;
для этого создаётся новый сеанс,
fd
делается управляющим терминалом для
вызывающего процесса (при этом
fd
служит в качестве стандартных ввода,
вывода и потока ошибок текущего процесса) и закрывает
fd
.
Функция
forkpty
() объединяет
openpty
(),
fork
(2) и
login_tty
()
для создания нового процесса, работающего в псевдотерминале. Файловый
дескриптор основной стороны псевдотерминала возвращается в
amaster
, имя
файла подчинённого устройства — в
name
, если оно не равно NULL. Аргументы
termp
и
winp
, если они не равны NULL, будут определять атрибуты
терминала и размеры окна подчинённой стороны псевдотерминала.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Если вызов
openpty
(),
login_tty
() или
forkpty
() завершается с
ошибкой, то возвращается -1 и
errno
указывает на тип ошибки. Иначе,
openpty
(),
login_tty
() и дочерний процесс
forkpty
() возвращают 0, и
родительский процесс
forkpty
() возвращает ID дочернего процесса.
ОШИБКИ
Функция
openpty
() завершается с ошибкой, если:
ENOENT
Нет доступных терминалов.
Функция
login_tty
() завершается с ошибкой, если
ioctl
(2) не сможет
установить
fd
управляющего терминала вызывающего процесса.
Функция
forkpty
() завершается с ошибкой, если завершается с ошибкой хотя
бы одна из функций
openpty
() или
fork
(2).
АТРИБУТЫ
Описание терминов данного раздела смотрите в
attributes
(7).
Интерфейс
Атрибут
Значение
forkpty
(),
openpty
()
безвредность в нитяхбезвредно (MT-Safe locale)
login_tty
()
безвредность в нитяхнебезопасно (MT-Unsafe race:ttyname)
СООТВЕТСТВИЕ СТАНДАРТАМ
Данные функции BSD есть в glibc. Они не стандартизированы в POSIX.
ЗАМЕЧАНИЯ
Модификаторы
const
были добавлены в аргументы указателей на структуры
openpty
() и
forkpty
() в glibc 2.8.
В версиях glibc до 2.0.92,
openpty
() возвращает файловые дескрипторы для
псевдотерминальной пары BSD; начиная с glibc 2.0.92, сначала производится
попытка открыть псевдотерминальную пару UNIX 98, а если это не удаётся, то
происходит возвращение к открытию псевдотерминальной пары BSD.
ДЕФЕКТЫ
Невозможно определить сколько места должно быть зарезервировано для
name
. Поэтому, вызов
openpty
() или
forkpty
() со значением
name
не равным NULL может быть небезопасен.