Майкл Джонсон - Разработка приложений в среде Linux. Второе издание
- Название:Разработка приложений в среде Linux. Второе издание
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:2007
- Город:Москва
- ISBN:978-5-8459-1143-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Майкл Джонсон - Разработка приложений в среде Linux. Второе издание краткое содержание
Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.
Разработка приложений в среде Linux. Второе издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Расположения символов, не определенные POSIX, активны только в случае установки локального управляющего флага IEXTEN(c_lflag)
.
Управляющие символы, которые вы видите как индексы массива с_сс
, перечислены ниже.
VINTR |
Смещение VINTR обычно устанавливается в ^C . Оно обычно сбрасывает на диск очереди ввода-вывода и передает SIGINT элементам группы процесса переднего плана, ассоциированным с tty. Процессы, неявно обрабатывающие SIGINT , немедленно завершаются. |
VQUIT |
Смещение VQUIT обычно устанавливается в ^\ . Оно обычно сбрасывает на диск очереди ввода-вывода и передает SIGQUIT элементам группы процесса переднего плана, ассоциированным с tty. Процессы, неявно обрабатывающие SIGQUIT , завершаются, при возможности сброса дампа ядра (см. главу 10). |
VERASE |
Смещение VERASE обычно устанавливается в ^H или ^? . В каноническом режиме оно обычно стирает предыдущий символ в строке. В неформатируемом режиме это несущественно. |
VKILL |
Смещение VKILL обычно установлено в ^U . В каноническом режиме оно обычно стирает всю строку. В неформатируемом режиме это несущественно. |
VEOF |
Смещение VEOF обычно установлено в ^D . В каноническом режиме оно заставляет read() на файловом дескрипторе возвращать 0, сигнализируя о состоянии конца файла. На некоторых системах оно может делить пространство с символом VMIN , активным лишь в неформатируемом режиме. (Это не проблема, если вы сохраните struct termios с каноническими установками режима для восстановления действий в неформатируемом режиме, что все равно присуще практике программирования с применением termios .) |
VSTOP |
Смещение VSTOP обычно установлено в ^S . Оно заставляет tty приостановить передачу выходных данных до получения символа VSTART , или, в случае установки IXANY , до получения любого символа. |
VSTART |
Смещение VSTART обычно установлено в ^Q . Оно запускает приостановленный вывод tty. |
VSUSP |
Смещение VSUSP обычно установлено в ^Z . Оно вызывает передачу SIGTSTP текущей группе процессов переднего плана; более подробно об этом рассказывается в главе 15. |
VEOL и VEOL2 |
В каноническом режиме эти символы, а также символ новой строки ( '\n' ), сигнализируют о состоянии конца строки. Это вызывает передачу скомпонованного буфера и запуск нового буфера. На некоторых системах VEOL может делить пространство с символом VTIME , активным лишь в неформатируемом режиме, так же, как VEOF может делить пространство с VMIN . Символ VEOL2 в POSIX не определен. |
VREPRINT |
Смещение VREPRINT обычно установлено в ^R . В каноническом режиме в случае установки флага ECHO оно вызывает локальное отражение символа VREPRINT , новой строки (и возврата каретки, если это допустимо), а также перепечатку всего текущего буфера. Этот символ в POSIX не определен. |
VWERASE |
Смещение WERASE обычно установлено в ^W . В каноническом режиме оно стирает все пробелы в конце буфера, затем все остальные символы, что дает эффект стирания предыдущего слова в строке. Этот символ в POSIX не определен. |
VLNEXT |
Смещение VLNEXT обычно установлено в ^V . Само оно не вводится в буфер, но вызывает литеральное помещение в буфер следующего символа, даже если это один из управляющих символов. Для того чтобы ввести один литеральный символ VLNEXT , введите его дважды. Этот символ в POSIX не определен. |
Для отключения любой позиции управляющего символа установите его значение в _POSIX_VDISABLE
. Это работает только в случае определения _POSIX_VDISABLE
как значения, не равного -1. _POSIX_VDISABLE
работает в Linux, но переносимая программа, к сожалению, не сможет зависеть от отключения расположений управляющих символов во всех системах.
16.5.8. Локальные флаги
Флаги локального режима влияют на локальную обработку, что в какой-то мере относится к способу сбора символов перед их выводом. Когда устройство находится в каноническом режиме (режиме с обработкой), символы отражаются локально без передачи в удаленную систему до тех пор, пока не встретится символ новой строки. На этом этапе передается вся строка, а удаленный конец обрабатывает ее без повторного отражения. В неформатируемом режиме каждый символ передается в удаленную систему в таком виде, в каком он принимается. Иногда символ отображается только удаленной системой, иногда только локальной, а иногда, например, при чтении пароля, он и вовсе не отображается.
Некоторые флаги могут вести себя иначе, в зависимости от того, в каком режиме находится терминал: каноническом или неформатируемом. Флаги, ведущие себя иначе в каноническом и неформатируемом режимах, отмечены.
Флаги, работающие на c_cflag
, перечислены ниже.
ICANON |
При установке ICANON включается канонический режим. Если ICANON не установлен, включается неформатируемый режим. |
ECHO |
При установке ECHO включается локальное эхо. Если ECHO не установлен, все остальные флаги, названия которых начинаются с ECHO , эффективно отключаются и функционируют так, как будто они все, кроме ECHONL , не установлены. |
ECHOCTL |
При установке ECHOCTL управляющие символы выводятся как ^C , где С — это символ, формирующийся добавлением восьмеричного 0100 к управляющему символу, по модулю восьмеричного 0200. Поэтому Control-C отображается как ^C , a Control-? (восьмеричный 0177) отображается как ^? ( ? — это восьмеричный 77). Этот флаг в POSIX не определен. |
ECHOE |
В каноническом режиме при установке ECHOE в случае получения символа ERASE предыдущий символ на дисплее по возможности стирается. |
ECHOK и ECHOKE |
В каноническом режиме при получении символа KILL вся текущая строка стирается из буфера. Если не установлены ни ECHOK , ни ECHOKE , ни ECHOE , выводится представление символа KILL с помощью ECHOCTL ( ^U по умолчанию) для обозначения стертой строки. Если установлены ECHOE и ECHOK , но ECHOKE не установлен, выводится представление символа KILL с помощью ECHOCTL , сопровождаемое новой строкой, которая затем обрабатывается OPOST в случае установки OPOST . Если установлены ECHOE , ECHOK и ECHOKE , строка стирается. См. описание ECHOPRT для другой вариации на эту тему. Флаг ECHOKE в POSIX не определен. В системах без флага ECHOKE установка флага ECHOK может быть эквивалентна установке и ECHOK , и ECHOKE в Linux. |
ECHONL |
В каноническом режиме при установке ECHONL символы новой строки ( '\n' ) отражаются даже в том случае, если ECHO не установлен. |
ECHOPRT |
В каноническом режиме при установке ECHOPRT символы выводятся при стирании, когда принимаются символы ERASE или WERASE (или KILL , если установлены ECHOK и ECHOKE ). Когда принимается первый в последовательности символ стирания, выводится \ , а при выводе последнего символа стирания (достигается конец строки или вводится нестертый символ), выводится / . Каждый вводимый вами нормальный символ просто отображается. Поэтому ввод asdf , сопровождаемый двумя символами ERASE , а также df и символом KILL , будет выглядеть следующим образом: asdf\fd/df\fdsa/ . Этот флаг полезен для отладки и использования документирующих терминалов вроде первоначального телетайпа, где символы печатаются на бумаге; в другом случае он не пригодится. Этот флаг в POSIX не определен. |
ISIG |
Если установлен ISIG , управляющие символы INTR , QUIT и SUSP вызывают отправку соответствующего сигнала ( SIGINT , SIGQUIT или SIGTSTP соответственно; см. главу 12) всем процессам в текущей группе процессов переднего плана на данном tty. |
NOFLSH |
Обычно при получении символов INTR и QUIT очереди ввода и вывода сбрасываются. При установке NOFLSH очереди не сбрасываются. |
TOSTOP |
Если установлен TOSTOP , то в том случае, когда процесс, не находящийся в текущей группе процессов переднего плана, пытается выполнить запись в свой управляющий терминал, передается SIGTTOU всей группе процессов, членом которой является данный процесс. По умолчанию этот сигнал останавливает процесс, как при нажатии комбинации клавиш, соответствующей символу SUSP . |
IEXTEN |
Этот флаг описан в POSIX как определяемый реализацией. Он включает обработку символов ввода, определяемую реализацией. Хотя переносимые программы не устанавливают этот бит, IUCLC и определенные возможности стирания символов в Linux зависимы от его установки. К счастью, он чаще всего разрешен по умолчанию в системах Linux, поскольку ядро изначально разрешает его при установке tty, поэтому обычно не нужно устанавливать его по какой-либо причине. |
16.5.9. Управление read()
Интервал:
Закладка: