table of contents
| OPENPTY(3) | Руководство программиста Linux | OPENPTY(3) |
ИМЯ¶
openpty, login_tty, forkpty - функции для работы с терминалом (tty)
ОБЗОР¶
#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() подготавливает tty fd (который может быть реальным устройством tty или подчинённым псевдотерминала, возвращаемым 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
- Нет доступных tty.
Функция login_tty() завершается с ошибкой, если ioctl(2) не сможет установить fd управляющего терминала вызывающего процесса.
Функция forkpty() завершается с ошибкой, если завершается с ошибкой хотя бы одна из функций openpty() или fork(2).
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Эти функции есть в BSD, а также в libc5 и glibc2. Отсутствуют в 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 может быть небезопасен.
СМОТРИТЕ ТАКЖЕ¶
| 2010-06-13 | GNU |