添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
玉树临风的乌龙茶  ·  Android Binder ...·  3 周前    · 
沉稳的冰棍  ·  C + + calling the ...·  3 月前    · 
旅途中的柿子  ·  Yaml Line 189: Did ...·  3 月前    · 
面冷心慈的树叶  ·  Office 2013-2024 C2R ...·  5 月前    · 
伤情的匕首  ·  Troubleshooting ...·  1 年前    · 

ОБЗОР

#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 может быть небезопасен.