Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 

MIN > 0
и
TIME > 0
. Это самый сложный случай. После вызова
read
ждет получения символа. Когда первый символ получен, каждый раз при получении последующего символа запускается межсимвольный таймер (или перезапускается, если он уже был запущен). Вызов
read
завершится, когда либо можно будет считать
MIN
символов, либо межсимвольное время превысит
TIME
десятых долей секунды. Это может пригодиться для подсчета разницы между единственным нажатием клавиши <Esc> и запуском функциональной клавиатурной escape-последовательности. Тем не менее следует знать, что сетевые соединения или высокая загрузка процессора могут полностью стереть такие полезные сведения о времени.

Установив неканонический режим и используя значения

MIN
и
TIME
, программы могут выполнять посимвольную обработку ввода.

Доступ к режимам терминала из командной оболочки

Если вы хотите просмотреть параметры

termios
, находясь в командной оболочке, примените следующую команду для получения их списка:

$ stty -a

На установленных у авторов системах Linux, обладающих структурами

termios
с некоторыми расширениями по сравнению со стандартными, получен следующий вывод:

speed 38400 baud; rows 24; columns 80; line = 0;

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

werase = ^W; lnext = ^V; flush = ^O, min = 1; time = 0;

– parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts

– ignbrk -brkint -ignpar -parmirk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff

– iuclc -ixany -imaxbe1 iutf8

opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel n10 cr0 tab0 bs0 vt0 ff0

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt

echoctl echoke

Среди прочего, как видите, символ

EOF
— это <Ctrl>+<D>, и включено отображение. Экспериментируя с установками терминала, легко получить в результате терминал в нестандартном режиме, что затруднит его дальнейшее использование. Есть несколько способов справиться с этой трудностью.

 Первый способ — применить следующую команду, если ваша версия

stty
поддерживает ее:

$ stty sane

Если вы потеряли преобразование клавиши возврата каретки в символ перехода на новую строку (который завершает строку), возможно, потребуется ввести

stty sane
, но вместо нажатия клавиши <Enter> нажать комбинацию клавиш <Ctrl>+<J> (которая обозначает переход на новую строку).

 Второй способ — применить команду

stty -g
и записать текущие установки
stty
в форму, готовую к повторному считыванию. В командной строке вы можете набрать следующее:

$ stty -g > save_stty

...

<эксперименты с параметрами>

...

$ stty $(cat save_stty)

В финальной команде

stty
вам все еще придется использовать комбинацию клавиш <Ctrl>+<J> вместо клавиши <Enter>. Ту же самую методику можно применить и в сценариях командной оболочки.

save_stty="$(stty -g)"

<изменение stty-параметров>

stty $save_stty

 Если вы все еще в тупике, третий способ — перейти на другой терминал, применить команду

ps
для поиска оболочки, которую вы сделали непригодной, и затем использовать команду
kill hup <id процесса>
для принудительного завершения этой командной оболочки. Поскольку перед выводом регистрационного приглашения параметры
stty
всегда восстанавливаются, у вас появится возможность нормально зарегистрироваться в системе еще раз.

Задание режимов терминала из командной строки

Вы также можете применять команду

stty
для установки режимов терминалов непосредственно из командной строки.

Для установки режима, в котором ваш сценарий командной оболочки сможет выполнять посимвольное считывание, вы должны отключить канонический режим и задать 1 и 0. Команда будет выглядеть следующим образом:

$ stty -icanon min 1 time 0

Теперь терминал будет считывать символы немедленно, вы можете попробовать выполнить еще раз первую программу menu1. Вы увидите, что она работает, как первоначально и предполагалось.

Вы также могли бы улучшить вашу попытку проверки пароля (см. главу 2), отключив отображение перед приглашением ввести пароль. Команда, выполняющая это действие, должна быть следующей:

$ stty -echo

Примечание

Не забудьте применить команду

stty echo
для возврата отображения после ваших экспериментов!

Скорость терминала

Последняя функция, обслуживаемая структурой

termios
, — манипулирование скоростью линии передачи. Для этой скорости не определен отдельный элемент структуры; она управляется вызовами функций. Скорости ввода и вывода обрабатываются отдельно.

Далее приведены четыре прототипа вызовов:

#include <termios.h> 

speed_t cfgetispeed(const struct termios *);

speed_t cfgetospeed(const struct termios *);

int cfsetispeed(struct termios *, speed_t speed);

int cfsetospeed(struct termios *, speed_t speed);

Обратите внимание на то, что они воздействуют на структуру

termios
, а не непосредственно на порт. Это означает, что для установки новой скорости вы должны считать текущие установки с помощью функции
tcgetattr
, задать скорость, применив приведенные вызовы, и затем записать структуру
termios
обратно с помощью функции
tcsetattr
. Скорость линии передачи изменится только после вызова
tcsetattr
.

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

Архил...?

Кожевников Павел
1. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...?

Барон Дубов 8

Карелин Сергей Витальевич
8. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 8

Шайтан Иван 3

Тен Эдуард
3. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Шайтан Иван 3

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Гранит науки. Том 4

Зот Бакалавр
4. Герой Империи
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Гранит науки. Том 4

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Неучтенный элемент. Том 2

NikL
2. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 2

Звездная Кровь. Изгой VII

Елисеев Алексей Станиславович
7. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
технофэнтези
рпг
фантастика: прочее
попаданцы
5.00
рейтинг книги
Звездная Кровь. Изгой VII

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

Вернувшийся: Новая жизнь. Том I

Vector
1. Вернувшийся
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Новая жизнь. Том I

Легионы во Тьме 2

Владимиров Денис
10. Глэрд
Фантастика:
боевая фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Легионы во Тьме 2

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Выдумщик (Сочинитель-2)

Константинов Андрей Дмитриевич
6. Бандитский Петербург
Детективы:
боевики
7.93
рейтинг книги
Выдумщик (Сочинитель-2)

Хозяин Стужи 3

Петров Максим Николаевич
3. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи 3