Читаем Linux API. Исчерпывающее руководство полностью

Мы опускаем множество подробностей, касающихся SSH-клиента и сервера. Например, эти программы шифруют данные, передающиеся по сети в любом направлении. В нашем примере SSH-сервер на удаленном компьютере состоит лишь из одного процесса, но на самом деле работает в параллельном режиме. Он становится демоном и создает пассивный TCP-сокет, который ждет входящих соединений со стороны SSH-клиентов. Для каждого соединения главный SSH-сервер создает отдельный дочерний процесс, полностью отвечающий за обслуживание конкретной клиентской сессии (именно этот дочерний процесс изображен на рис. 60.3). Помимо настройки псевдотерминала, описанной выше, дочерний процесс SSH-сервера занимается аутентификацией пользователя, обновлением учетных файлов на удаленном компьютере (как описано в главе 40) и впоследствии запуском командной оболочки.

Рис. 60.3.Как ssh использует псевдотерминал

В некоторых ситуациях ко вторичному концу псевдотерминала можно подключать несколько процессов. Такой сценарий проиллюстрирован в нашем примере с ssh. Лидером сессии для вторичного устройства является командная оболочка, создающая группы процессов для выполнения команд, вводимых удаленным пользователем. Для всех этих процессов вторичный конец играет роль управляющего терминала. Как и при работе в обычном терминале, одна из указанных групп может быть активной по отношению ко вторичному концу псевдотерминала, и только ей будет позволено считывать и записывать (если был установлен бит TOSTOP) данные в это устройство.

Приложения, использующие псевдотерминалы

Псевдотерминалы применяются не только в сетевых службах, но и во многих других приложениях, среди которых можно выделить следующие.

• Приложение expect(1) задействует псевдотерминал, чтобы позволить управлять программой, ориентированной на работу с терминалом, с помощью сценариев.

• Эмуляторы терминалов, такие как xterm, используют псевдотерминалы для предоставления терминальных функций в оконном режиме.

• Приложение screen(1) применяет псевдотерминалы для мультиплексирования одного физического терминала (или терминального окна) между несколькими процессами (например, между сессиями командной строки).

• Псевдотерминалы используются в программе script(1), которая записывает весь ввод и вывод, возникающий во время сессии командной строки.

• Иногда псевдотерминал может помочь обойти стандартную блочную буферизацию, выполняемую стандартными функциями ввода/вывода при записи данных на диск или в именованный канал вместо линейной буферизации, применяемой для терминального вывода (мы вернемся к этому вопросу в упражнении 60.7).

60.2. Псевдотерминалы стандарта UNIX 98

В данном разделе мы шаг за шагом напишем функцию ptyFork(), выполняющую большую часть работы, проиллюстрированной на рис. 60.2. Затем реализуем на ее основе программу script(1). Но сначала рассмотрим различные библиотечные функции, применяемые в сочетании с псевдотерминалами стандарта UNIX 98.

• posix_openpt() открывает свободное первичное устройство псевдотерминала и возвращает файловый дескриптор, который будет использоваться для работы с этим устройством в последующих вызовах.

• grantpt() изменяет владельца и права доступа ко вторичному устройству, соединенному с первичным концом псевдотерминала.

• unlockpt() разблокирует вторичное устройство, соединенное с первичным концом псевдотерминала, чтобы его можно было открыть.

• ptsname() возвращает имя вторичного устройства, соединенного с первичным концом псевдотерминала. После этого вторичное устройство может быть открыто с помощью вызова open().

60.2.1. Открытие неиспользуемого первичного устройства: вызов posix_openpt()

Функция posix_openpt() находит и открывает неиспользуемое первичное устройство псевдотерминала, после чего возвращает файловый дескриптор для дальнейшего обращения к этому устройству.

#define _XOPEN_SOURCE 600

#include

#include

int posix_openpt(int flags);

Возвращает файловый дескриптор при успешном завершении или -1 при ошибке

Аргумент flags может быть пустым или состоять из следующих флагов, к которым применено побитовое ИЛИ.

• O_RDWR — открывает устройство одновременно для чтения и записи. Обычно эта константа всегда включается в аргумент flags.

• O_NOCTTY — не делает данный терминал управляющим для текущего процесса. В Linux первичный конец псевдотерминала не может стать управляющим независимо от того, указан ли при вызове posix_openpt() флаг O_NOCTTY. (Здесь есть определенный смысл, поскольку первичный конец не является терминалом как таковым; это просто другая сторона терминала, к которой подключено вторичное устройство.) Однако в ряде систем флаг O_NOCTTY является обязательным, если мы не хотим, чтобы в результате открытия первичного устройства наш процесс обзавелся управляющим терминалом.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных

Все жанры