Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

 1: /* slecho.c */

 2:

 3: #include <ctype.h>

 4: #include <slang/slang.h>

 5: #include <stdio.h>

 6:

 7: int main(void) {

 8: char ch = '\0';

 9:

10: /*

11: Начать обработку SLANG tty со следующими параметрами:

12: -1 символ прерывания по умолчанию (обычно Ctrl-C)

13: 0 управление потоком не производится; все символы (кроме

14: символа прерывания) будут переданы в программу 1 разрешение

15: обработки выходных данных OPOST управляющих последовательностей

16: */

17: SLang_init_tty(-1, 0, 1);

18:

19: while (ch != 'q') {

20: ch = SLang_getkey;

21: printf("чтение: %c 0x%x\n", isprint(ch) ? ch : ' ', ch);

22: }

23:

24: SLang_reset_tty;

25:

26: return 0;

27: }

Эта программа предполагает, что все заголовочные файлы S-Lang содержатся в каталоге

/usr/include/slang
. Если в вашей системе они находятся в другом каталоге, то тогда следует изменить соответствующим образом код (это касается всех примеров в этой главе). Для компилирования и компоновки этой программы в команду компоновки потребуется добавить
– lslang
, чтобы компоновщик мог найти функции S-Lang.

24.1.1. Инициализация обработки ввода в S-Lang

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

Slang_init_tty
нужно перевести терминал в состояние, которое ожидается S-Lang:

int SLang_init_tty(int abort_char, int flow_ctrl, int opost);

Первый параметр функции

Slang_init_tty
определяет символ, который будет использован для прекращения работы. При передаче значения
– 1
будет сохранен текущий символ прерывания tty (обычно, <Ctrl+C>); в противном случае символу прерывания будет назначено переданное значение. Каждый раз при вводе на терминале символа прекращения работы ядро посылает сигнал
SIGINT
тому процессу, который обычно завершает работу приложения. В главе 12 мы рассказывали о том, как производится обработка сигналов, подобных
SIGINT
.

Следующий параметр отвечает за включение и отключение управления потоком. Управляя потоком на уровне терминала, пользователь может приостанавливать процесс вывода данных на терминал, не допуская прокрутки, а затем возобновлять его. Обычно для приостановления процесса вывода данных на экран используется <Ctrl+S> и <Ctrl+Q> — для возобновления этого процесса. Хотя эта особенность удобна для некоторых утилит, ориентированных на работу со строками, программы, работающие с библиотекой S-Lang, обычно ориентированы на работу с экраном, поэтому она может оказаться излишней. S-Lang позволяет приложениям отключать эту функциональность, в результате чего программа сможет назначить нажатия клавиш Stop (Стоп) и Start (Пуск) для других команд. Чтобы включить управление потоками, функции

SLang_init_tty
необходимо передать ненулевое значение в качестве второго параметра.

Последний параметр разрешает заключительную обработку вывода на терминале. Любой механизм ядра, связанный с заключительной обработкой, будет включен, если последний параметр будет иметь ненулевое значение. Информацию об обработке выходных данных можно найти в главе 16.

24.1.2. Восстановление состояния терминала

После того как состояние терминала было изменено с помощью функции

SLang_init_tty
, программа, прежде чем завершить свою работу, должна явным образом восстановить первоначальное состояние терминала. Если этого не сделать, то вряд ли можно будет работать с терминалом после завершения программы. Функция
SLang_init_tty
не принимает и не возвращает никаких аргументов.

Если вы пишете программу, работу которой нужно будет приостановить (обычно посредством нажатия <Ctrl+Z>), то эту функцию также необходимо вызывать после получения сигнала

SIGTSTP
. Более подробно об обработке сигнала
SIGTSTP
можно прочитать в главе 15.

Не исключено, что в процессе разработки программ с помощью библиотеки S-Lang в них будут неоднократно происходить сбои, после которых терминал будет находиться в нестандартном состоянии. С этой проблемой можно справиться, если выполнить команду

stty sane
.

24.1.3. Чтение символов с терминала

После правильной инициализации терминала чтение одиночных нажатий клавиш не составит труда. Функция

SLang_getkey
возвращает одиночный символ из терминала. Однако это не означает, что функция возвращает одиночное нажатие клавиши, ведь в системе Unix после многих нажатий клавиш может быть возвращено несколько символов. Например, на терминале VT100 (а также на многих других терминалах, включая консоль Linux) при нажатии клавиши <F1> на экран посылается четыре символа —
ESC [ [ А
(попробуйте запустить
slecho
, нажать клавишу <F1> и посмотрите, что получится). Чтобы установить соответствие между подобными многосимвольными последовательностями и нажатиями клавиш, можно использовать базу данных
terminfo
[37].

  • Читать дальше
  • 1
  • ...
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • ...
Жанры
  • Романы
    • Исторические любовные романы
    • Эро литература
    • Современные любовные романы
    • Короткие любовные романы
    • Love Action
    • Остросюжетные любовные романы
    • Романы про измену
    • Прочие любовные романы
    • Любовно-фантастические романы
    • Зарубежные любовные романы
  • Приключения
    • Прочие приключения
    • Вестерны
    • Исторические приключения
    • Морские приключения
    • Путешествия и география
    • Зарубежные приключения
    • Приключения про индейцев
    • Природа и животные
  • Детективы
    • Техно триллер
    • Дамский детективный роман
    • Исторические детективы
    • Классические детективы
    • Шпионские детективы
    • Триллеры
    • Юридический триллер
    • Крутой детектив
    • Полицейские детективы
    • Медицинский триллер
    • Иронические детективы
    • Боевики
    • Криминальные детективы
    • Политические детективы
    • Маньяки
    • Зарубежные детективы
    • Прочие Детективы
    • Спецслужбы
  • Драматургия
    • Водевиль
    • Драма
    • Киносценарии
    • Мистерия
    • Пьесы
    • Сценарии
    • Трагедия
    • Зарубежная драматургия
  • Фантастика
    • Хентай
    • Ранобэ
    • Сянься
    • Дорама
    • Уся
    • Аниме
    • Космоопера
    • Юмористическая фантастика
    • Боевая фантастика
    • Героическая фантастика
    • Технофэнтези
    • Готический роман
    • Социально-философская фантастика
    • Попаданцы
    • Историческая фантастика
    • Ироническая фантастика
    • Зарубежная фантастика
    • Историческое фэнтези
    • Юмористическое фэнтези
    • Детективная фантастика
    • Эпическая фантастика
    • Мистика
    • Космическая фантастика
    • Фантастика: прочее
    • Постапокалипсис
    • Научная фантастика
    • Киберпанк
    • Альтернативная история
    • Ненаучная фантастика
    • РПГ
    • Стимпанк
    • Ироническое фэнтези
    • Ужасы и мистика
    • Сказочная фантастика
    • Фэнтези
    • Городское фэнтези
  • Эзотерика
    • Язычество
    • Фэн-шуй
    • Христианство
    • Религия
    • Зарубежная религиозная литература
    • Православие
    • Эзотерика
    • Хиромантия
    • Индуизм
    • Ислам
    • Протестантизм
    • Самосовершенствование
    • Буддизм
    • Католицизм
    • Астрология
    • Прочая религиозная литература
    • Иудаизм
  • Проза
    • Военная проза
    • Легкая проза
    • Сентиментальная проза
    • Советская классическая проза
    • Антисоветская литература
    • Афоризмы
    • Эпистолярная проза
    • Новелла
    • Семейный роман
    • Рассказ
    • Классическая проза
    • Эпопея
    • Эссе
    • Проза прочее
    • Повесть
    • Магический реализм
    • Современная проза
    • Контркультура
    • Роман
    • Историческая проза
    • Русская классическая проза
    • Феерия
  • Стихи и поэзия
    • Визуальная поэзия
    • Эпическая поэзия
    • в стихах
    • Песенная поэзия
    • Поэзия
    • Палиндромы
    • Cтихи, поэзия
    • Зарубежная поэзия
    • Верлибры
    • Экспериментальная поэзия
    • Лирика
    • Басни
    • Драматургия
  • Юмор
    • Зарубежный юмор
    • Юмористические стихи
    • Сатира
    • Прочий юмор
    • Комедия
    • Юмористическая проза
    • Анекдоты
  • Дом и досуг
    • Рыбалка
    • Охота
    • Здоровье детей
    • Домашние животные
    • Воспитание детей
    • Отдых / туризм
    • Зарубежная прикладная литература
    • Прочее домоводство
    • Прикладная литература
    • Домашнее хозяйство
    • Кулинария
    • Медицина и здоровье
    • Сделай сам
    • Спорт
    • Хобби и ремесла
    • Образовательная литература
    • Сад и Огород
    • Здоровье и красота
    • Развлечения
    • Коллекционирование
    • Секс / секс-руководства
  • Образование и наука
    • Боевые искусства
    • Органическая химия
    • Обществознание
    • Военная история
    • Ветеринария
    • Ораторское искусство / риторика
    • Физика
    • Химия
    • Семейная психология
    • Военная техника и вооружение
    • Иностранные языки
    • Прочая научная литература
    • Психотерапия и консультирование
    • Биохимия
    • Cпецслужбы
    • Астрономия и Космос
    • Школьные учебники
    • Учебная и научная литература
    • Учебники
    • Государство и право
    • Психология
    • Литературоведение
    • История
    • Научно-популярная литература
    • Политика
    • Детская психология
    • Юриспруденция
    • Шпаргалки
    • Педагогика
    • Физическая химия
    • Медицина
    • Биофизика
    • Языкознание
    • Зарубежная образовательная литература
    • Зоология
    • Геология и география
    • Краткое содержание
    • Зарубежная психология
    • Саморазвитие / личностный рост
    • Технические науки
    • Религиоведение
    • Военное дело
    • Личная эффективность
    • Аналитическая химия
    • Рефераты
    • Экология
    • Философия
    • Альтернативная медицина
    • Математика
    • Культурология
    • Военное дело: прочее
    • Ботаника
    • Биология
  • Словари и Энциклопедии
    • Бизнес-справочники
    • Справочники
    • Словари
    • Руководства
    • Энциклопедии
    • Словари, справочники
    • Путеводители
    • Прочая справочная литература
    • Зарубежная справочная литература
  • Финансы и бизнес
    • Отраслевые издания
    • Бухучет и аудит
    • Недвижимость
    • Деловая литература
    • Ценные бумаги
    • Внешнеэкономическая деятельность
    • Торговля
    • Зарубежная деловая литература
    • О бизнесе популярно
    • Стартапы и создание бизнеса
    • Корпоративная культура
    • Управление, подбор персонала
    • Маркетинг, PR, реклама
    • Личные финансы
    • Работа с клиентами
    • Менеджмент
    • Интернет-бизнес
    • Поиск работы, карьера
    • Малый бизнес
    • Делопроизводство
    • Государственное и муниципальное управление
    • Банковское дело
    • Экономика
  • Книги по IT
    • Прочая компьютерная литература
    • Базы данных
    • Цифровая обработка сигналов
    • Программное обеспечение
    • Интернет
    • Программирование
    • Зарубежная компьютерная литература
    • ОС и Сети
    • Компьютерное «железо»
  • Техника
    • Архитектура
    • Автомобили и ПДД
    • Строительство и сопромат
    • Металлургия
    • Транспорт и авиация
    • Радиоэлектроника
  • Древние книги
    • Зарубежная старинная литература
    • Мифы. Легенды. Эпос
    • Древневосточная литература
    • Древнерусская литература
    • Прочая старинная литература
    • Античная литература
    • Европейская старинная литература
  • Документальное
    • Историческая литература
    • Публицистика
    • Научпоп
    • Критика
    • Книги о войне
    • Истории из жизни
    • Военная документалистика
    • Зарубежная публицистика
    • Биографии и мемуары
    • Прочая документальная литература
  • Прочее
    • Интерьеры
    • Газеты и журналы
    • Театр
    • Музыка
    • Комиксы / манга
    • Зарубежная классика
    • Современная зарубежная литература
    • Изобразительное искусство, фотография
    • Мода и стиль
    • Искусство и Дизайн
    • Зарубежная литература о культуре и искусстве
    • Фанфик
    • Подростковая литература
    • Шахматы
    • Кино
    • Культура и искусство
    • Недописанное
    • Классическая литература
  • Без Жанра
    • Разное
    • Иностранная литература
  • Народные
    • Загадки
    • Народные сказки
    • Народные песни
    • Былины
    • Частушки
    • Фольклор: прочее
    • Пословицы, поговорки
  • Книги Для Детей
    • Детские остросюжетные
    • Сказки
    • Детские стихи
    • Прочая детская литература
    • Детская образовательная литература
    • Книги для дошкольников
    • Детская фантастика
    • Детские детективы
    • Книга-игра
    • Детский фольклор
    • Буквари
    • Детская проза
    • Детская познавательная и развивающая литература
    • Внеклассное чтение
    • Зарубежные детские книги
    • Детские приключения
Сейчас Читают
Последняя Арена
Последняя Арена
Греков Сергей
Энфис. Книга 1
Энфис. Книга 1
Кронос Александр
Пенсия для морского дьявола
Пенсия для морского дьявола
Чиркунов Игорь
Возвышение Меркурия. Книга 14
Возвышение Меркурия. Книга 14
Кронос Александр
Жандарм 2
Жандарм 2
Семин Никита
Покоривший СТЕНУ 9: Далахан
Покоривший СТЕНУ 9: Далахан
Мантикор Артемис
Я же бать, или Как найти мать
Я же бать, или Как найти мать
Юнина Наталья
Para bellum
Para bellum
Ланцов Михаил Алексеевич
Девочка-яд
Девочка-яд
Коэн Даша
Император
Император
Рави Ивар

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: