Other Alias
login_tty, forkptyОБЗОР
#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.