16.6.1. Открытие псевдотерминалов
16.6.1. Открытие псевдотерминалов
Существует широкое разнообразие способов открытия псевдотерминалов. Обычно это делается (по крайней мере, в Linux) способом, более или менее соответствующим стандартам, основанным на SysV, а также устаревшим способом, основанным на практике BSD. Наиболее распространенным методом среди системных программистов в Linux является набор расширений BSD, реализованных также как часть glibc. Менее распространенный метод документируется как часть стандарта 1998 года — Unix98, и документируется иначе в версии 2000 года стандарт Unix98.
Исторически существует два различных метода открытия псевдотерминалов в Unix и подобных системах. Linux изначально придерживался модели BSD, хотя она более сложная в использовании, поскольку модель SysV явно написана в рамках STREAMS, а в Linux STREAMS не реализована. Однако модель BSD требует, чтобы каждое приложение искало неиспользуемое ведущее устройство pty, зная о многих специфических именах устройств. Между 64 и 256 устройства pty обычно доступны, а с целью поиска первого открытого устройства программы проводят поиск в устройствах, начиная с наименьшего числа. Они выполняют поиск в специфической манере, которая демонстрируется в программе ptypair, включенной в данный раздел.
С моделью BSD связано несколько проблем.
• Каждое приложение должно знать весь набор доступных имен. При расширении набора возможных псевдотерминалов каждое приложение, использующее псевдотерминал, должно быть модифицировано с явным знанием всех возможных имен устройств, что вызывает неудобства и подвержено ошибкам.
• Время, уходящее на поиск, становится ощутимым при поиске среди тысяч узлов устройств в каталоге /dev. Системное время тратится, и доступ к системе замедляется, что очень плохо масштабируется в больших системах.
• Обработка полномочий может оказаться проблематичной. Например, если программа выполняет аварийное завершение, она может оставить файлы устройств псевдотерминалов с несоответствующими полномочиями.
Поскольку модель SysV явно написана в рамках STREAMS и требует использования вызовов ioctl() для запуска подчиненных компонентов, она не является вариантом выбора Linux. Однако интерфейс Unix98 не определяет функции, присущие STREAMS, поэтому в 1998 году в Linux была добавлена поддержка псевдотерминалов стиля Unix98.
Ядро Linux может быть скомпилировано без поддержки интерфейса Unix98, и можно встретить более старые системы без псевдотерминалов стиля Unix98, поэтому мы представим код, который пытается открыть псевдотерминалы стиля Unix98, но также может вернуться к интерфейсу BSD. (Мы не документируем части модели SysV, присущие STREAMS; в [35] подробно описан интерфейс STREAMS. Вам вряд ли понадобится код, специфичный для STREAMS; спецификация Unix98 не требует его.)
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Открытие SCM
Открытие SCM Для создания службы требуется отдельный процесс, выступающий в качестве "администратора" и играющий во многом ту же роль, что и программа JobShell, которая использовалась в главе 6 для запуска задач. Первый шаг состоит в открытии SCM и получении дескриптора, который
16.6.2. Простые способы открытия псевдотерминалов
16.6.2. Простые способы открытия псевдотерминалов В библиотеке libutil glibc предлагает две функции — openpty() и forkpty(), — выполняющие почти всю работу по поддержке псевдотерминалов.#include <pty.h>int openpty(int * masterfd, int * slavefd, char * name, struct termios * term, struct winsize * winp);int forkpty(int * masterfd, char * name, struct termios *
16.6.4. Примеры псевдотерминалов
16.6.4. Примеры псевдотерминалов Возможно, одной из самых простых программ, которая может быть написана для использования pty, является программа, открывающая пару pty и запускающая оболочку на подчиненном компоненте pty, соединяя его с управляющим устройством pty. Написав эту
Открытие файла
Открытие файла fopenОткрывает файл и привязывает его к дескриптору.Синтаксис:int fopen(string $filename, string $mode, bool $use_include_path=false)Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то функция возвращает false. Необязательный
Открытие документа
Открытие документа pdf_set_infoЗаполнение поля информации документа.Синтаксис:void pdf_set_info(int pdf_document, string fieldname, string value)Возможные поля fieldname:Функция должна вызываться до создания страниц.<?php$fd = fopen("test.pdf", "w");$pdfdoc = pdf_open($fd);pdf_set_info($pdfdoc, "Author", "Имя автора");pdf_set_info($pdfdoc, "Creator", "Название
Открытие рисунков
Открытие рисунков Программа AutoCAD по умолчанию записывает внутреннее представление рисунка в файл с расширением DWG. Кроме рисунка файл содержит ряд параметров, определяющих значения переключателей режимов шага SNAP, сетки GRID, ортогонального режима ORTHO; принятые единицы
Открытие документа
Открытие документа В процессе работы пользователю часто приходится не только создавать документы, но и вносить изменения в существующие. Чтобы это сделать, необходимо открыть документ одним из следующих способов.Открытие документа не из WordОткрывать документы не
Открытие документа
Открытие документа Открыть документ Photoshop или любой другой растровый файл можно с помощью команды File ? Open (Файл ? Открыть). Окно команды открытия, как и окно команды сохранения, может отображаться в двух видах: в стиле Adobe или в стиле, приближенном к стандарту Windows (рис. 7.9). В
Открытие документа
Открытие документа Для открытия созданного ранее документа Word выполните команду Открыть в меню Кнопки «Office» (либо нажмите комбинацию клавиш Ctrl+O). В результате откроется окно, изображенное на рис. 2.12. Рис. 2.12. Открытие документа ВНИМАНИЕ Чтобы пользовательский шаблон
Б.1.1. Открытие файла
Б.1.1. Открытие файла Чтобы открыть файл и получить дескриптор для работы с ним, необходимо вызвать функцию open(). В качестве аргументов она принимает строку с путевым именем файла и флаги, определяющие способ открытия. С помощью функции open() можно также создать новый файл.
Открытие рисунков
Открытие рисунков Программа AutoCAD по умолчанию записывает внутреннее представление рисунка в файл с расширением DWG. Кроме рисунка файл содержит ряд параметров, определяющих значения переключателей режимов шага SNAP, сетки GRID, ортогонального режима ORTHO; принятые единицы
Открытие файлов
Открытие файлов Файл должен быть открыт функциями open, sopen или creat до выполнения первой операции ввода или вывода с использованием функций нижнего уровня для этого файла.Файл может быть открыт для чтения, записи, или для чтения и записи, может быть открыт в текстовом или в
Открытие рисунков
Открытие рисунков Программа AutoCAD по умолчанию записывает внутреннее представление рисунка в файл с расширением DWG. Кроме рисунка файл содержит ряд параметров, определяющих значения переключателей режимов шага SNAP, сетки GRID, ортогонального режима ORTHO; принятые единицы
Создание и открытие
Создание и открытие Создание и открытие проекта аналогичны таким же действиям в любой программе, работающей с сохраняемыми на диск документами, например с текстовым редактором (Блокнот, Microsoft Word).Если в параметрах проектов не установлен флажок Авт. сохранять и загружать
Открытие документа
Открытие документа Сохраненный документ можно будет открыть при помощи команд Файл ? Открыть или с помощью комбинации клавиш Ctrl и O. Окно открытия документаВы уже, наверное, заметили, что мы пользуемся пока только меню Файл. Меню ФайлЗдесь есть активные строки (темный