Читаем Основы программирования в Linux полностью

Функции echo и noecho просто включают и отключают отображение символов, набираемых на клавиатуре. Оставшиеся четыре функции управляют тем, как символы, набранные на терминале, становятся доступны программе с применением curses. Для того чтобы понять функцию cbreak, необходимо иметь представление о стандартном режиме ввода. Когда программа, использующая библиотеку curses, стартует с вызова функции initscr, устанавливается режим ввода, называемый режимом с обработкой (cooked mode). Это означает построчную обработку, т.е. ввод становится доступен программе после нажатия пользователем клавиши (или на некоторых клавиатурах). Специальные символы на клавиатуре включены, поэтому набор соответствующих клавиатурных последовательностей может сгенерировать сигнал в программе. Управление потоком, если терминал запускается с терминала, также включено. Вызывая функцию cbreak, программа может установить режим ввода cbreak, в котором символы становятся доступными программе сразу после их набора, а не помещаются в буфер и передаются программе только после нажатия клавиши . Как и в режиме с обработкой, специальные символы клавиатуры действуют, а простые клавиши, например , передаются для обработки непосредственно в программу, поэтому если вы хотите, чтобы нажатие клавиши приводило к привычным действиям, то вы должны запрограммировать их самостоятельно.

Вызов функции raw отключает обработку специальных символов, поэтому становится невозможной генерация сигналов или управление потоком с помощью набранных на клавиатуре специальных символьных последовательностей. Вызов функции nocbreak возвращает режим ввода в режим с обработкой символов, но режим обработки специальных символов не изменяет; вызов noraw восстанавливает и режим с обработкой, и обработку специальных символов.

<p>Клавиатурный ввод</p>

Чтение с клавиатуры — очень простая операция. К основным функциям чтения относятся следующие:

#include

int getch(void);

int getstr(char *string);

int getnstr(char *string, int number_of_characters);

int scanw(char *format, ...);

Все они действуют подобно своим аналогам, не входящим в библиотеку curses, getchar, gets и scanf. Обратите внимание на то, что у функции getstr нет возможности ограничить длину возвращаемой строки, поэтому применять ее следует с большой осторожностью. Если ваша версия библиотеки curses поддерживает функцию getnstr, позволяющую ограничить количество считываемых символов, всегда применяйте ее вместо функции getstr. Это очень напоминает поведение функций gets и fgets, с которыми вы познакомились в главе 3.

В упражнении 6.3 для демонстрации управления клавиатурой приведен пример короткой программы ipmode.c.

Упражнение 6.3. Режим клавиатуры и ввод

1. Наберите программу и включите в нее начальные вызовы библиотеки curses:

#include 

#include

#include

#include

#define PW_LEN 256

#define NAME_LEN 256

int main {

 char name[NAME_LEN];

 char password[PW_LEN];

 const char *real_password = "xyzzy";

 int i = 0;

 initscr;

 move(5, 10);

 printw("%s", "Please login:");

 move(7, 10);

 printw("%s", "User name: ");

 getstr(name);

 move(9, 10);

 printw("%s", "Password: ");

 refresh;

2. Когда пользователь вводит свой пароль, необходимо остановить отображение символов на экране. Далее сравните введенный пароль со строкой xyzzy:

 cbreak;

 noecho;

 memset(password, '\0', sizeof(password));

 while (i < PW_LEN) {

  password[i] = getch;

  if (password[i] == '\n') break;

  move(8, 20 + i);

  addch('*');

  refresh;

  i++;

 }

3. В заключение восстановите отображение символов и выведите сообщение об успешном или неудачном завершении:

 echo;

 nocbreak;

 move(11, 10);

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

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

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT