Linux Man на русском

  User    Syst    Libr    Device    Files    Other    Admin  



   login_tty - функции для работы с терминалом

login_tty(3) функции для работы с терминалом

Other Alias

openpty, 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.

ДЕФЕКТЫ

Невозможно определить сколько места должно быть зарезервировано для name. Поэтому, вызов openpty() или forkpty() со значением name не равным NULL может быть небезопасен.