Читаем Разработка приложений в среде Linux. Второе издание полностью

<p>16.5.9. Управление <code>read()</code></p>

Два элемента в массиве с_сс не являются управляющими символами и имеют отношение только к неформатируемому режиму: VTIME и VMIN. В этом режиме они определяют, когда возвращается read(). В каноническом режиме read() возвращается только в том случае, если строки были собраны или был достигнут конец файла, за исключением случая установки опции O_NONBLOCK.

В неформатируемом режиме считывание по одному байту за раз неэффективно. Также неэффективно опрашивать порт чтением в неблокируемом режиме. Существуют два намного более эффективных дополнительных метода чтения.

Первый заключается в использовании poll(), как описано в главе 13 и демонстрируется в коде robin.с. Если poll() сообщает, что файловый дескриптор готов к чтению, то известно, что вы можете немедленно прочитать некоторое количество байтов. Однако сочетание poll() со вторым методом сделает ваш код более эффективным, предоставляя возможность считывать больше байтов за один раз.

"Управляющие символы" VTIME и VMIN состоят в сложных взаимоотношениях. VTIME определяет промежуток времени для ожидания в десятых долях секунды (он не может быть больше cc_t, обычно это 8-битный unsigned char), который также может равняться нулю. VMIN определяет минимальное количество байт для ожидания (не для считывания — третий аргумент read() определяет максимальное количество байтов для считывания), которое тоже может равняться нулю.

• Если VTIME равен нулю, VMIN определяет количество байт для ожидания. Вызов read() не возвращается, пока не будут считано VMIN байт или пока не будет получен сигнал.

• Если VMIN равен нулю, VTIME определяет количество десятых частей секунд для ожидания read() перед возвращением, даже если данные недоступны. В таком случае read(), возвращающий нуль, необязательно сигнализирует о состоянии конца файла, как он обычно делает.

• Если ни VTIME, ни VMIN не равняются нулю, VTIME определяет количество десятых долей секунды для ожидания read() после того, как будет доступен хотя бы один байт. Если данные доступны при вызове read(), таймер немедленно запускается. Если данные недоступны при вызове read(), таймер запускается при принятии первого байта. Вызов read() возвращается или тогда, когда были приняты хотя бы байты VMIN, или по истечении таймера, независимо от того, что произойдет раньше. Он всегда возвращает хотя бы один байт, поскольку таймер не запускается, пока не будет доступен хотя бы один байт.

• Если и VTIME, и VMIN равны нулю, read() всегда немедленно возвращается, даже если данные недоступны. И снова ноль необязательно указывает на состояние конца файла.

<p>16.6. Псевдотерминалы</p>

Псевдотерминалы, или pty — это механизм, позволяющий программе на уровне пользователя заменять место (логически говоря) драйвера tty для элемента оборудования. pty имеет два отдельных конца: конец, эмулирующий оборудование, называется ведущим устройством pty, а конец, обеспечивающий программы обычным интерфейсом tty, называется подчиненным компонентом pty. Подчиненный компонент выглядит как обычный tty; ведущее устройство выглядит как стандартное устройство символьного ввода-вывода и не является tty.

Драйвер последовательного порта обычно реализуется как часть кода ядра, управляемая прерываниями. Однако так бывает не всегда. Например, существует хотя бы один терминальный сервер, основанный на SCSI, который использует обобщенный интерфейс SCSI для организации программы на уровне пользователя, сообщающейся с терминальным сервером и предоставляющей доступ к последовательным портам через pty.

Сеансы работы с сетевыми терминалами происходят подобным образом; программы rlogind и telnetd подключают сетевой сокет к ведущему устройству pty и запускают оболочку в подчиненном компоненте pty, чтобы заставить сетевые подключения действовать как tty, позволяя запускать интерактивные программы в сетевом подключении, не имеющем ничего общего с tty. Экранная программа мультиплексирует несколько соединений pty на один tty, который может или не может быть pty, соединенным с пользователем. Ожидаемая программа позволяет программам, настаивающим на запуске в интерактивном режиме в tty, быть запущенными в подчиненном компоненте pty под управлением другой программы, соединенной с ведущим устройством pty.

<p>16.6.1. Открытие псевдотерминалов</p>
Перейти на страницу:

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

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

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

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

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

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

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

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