Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Режимы клавиатуры
Процедуры считывания с клавиатуры управляются режимами. Режимы устанавливаются с помощью следующих функций:
<b>#include <curses.h></b>
<b>int echo(void);</b>
<b>int noecho(void);</b>
<b>int cbreak(void);</b>
<b>int nocbreak(void);</b>
<b>int raw(void);</b>
<b>int noraw(void);</b>
Функции
echo
noecho
cbreak
initscr
cbreak
cbreak
Вызов функции
raw
nocbreak
noraw
Клавиатурный ввод
Чтение с клавиатуры — очень простая операция. К основным функциям чтения относятся следующие:
<b>#include <curses.h></b>
<b>int getch(void);</b>
<b>int getstr(char *string);</b>
<b>int getnstr(char *string, int number_of_characters);</b>
<b>int scanw(char *format, ...);</b>
Все они действуют подобно своим аналогам, не входящим в библиотеку curses,
getchar
gets
scanf
getstr
getnstr
getstr
gets
fgets
В упражнении 6.3 для демонстрации управления клавиатурой приведен пример короткой программы ipmode.c.
1. Наберите программу и включите в нее начальные вызовы библиотеки curses:
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>
#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, ' ', 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);
if (strncmp(real_password, password, strlen(real_password)) == 0)
printw("%s", "Correct");
else printw("%s", "Wrong");
printw("%s", " password");
refresh();