Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
$ <b>stty -echo</b>Не забудьте применить команду
stty echoСкорость терминала
Последняя функция, обслуживаемая структурой
termiosДалее приведены четыре прототипа вызовов:
<b>#include <termios.h> </b><b>speed_t cfgetispeed(const struct termios *);</b><b>speed_t cfgetospeed(const struct termios *);</b><b>int cfsetispeed(struct termios *, speed_t speed);</b><b>int cfsetospeed(struct termios *, speed_t speed);</b>Обратите внимание на то, что они воздействуют на структуру
termiostcgetattrtermiostcsetattrtcsetattrВ вызовах перечисленных функций допускается задание разных значений скорости
speed□
B0□
B1200□
B2400□
B9600□
B19200□
B38400Не существует скоростей выше 38 400 бод, задаваемых стандартом, и стандартного метода обслуживания последовательных портов на более высоких скоростях.
В некоторых системах, включая Linux, для выбора более высоких скоростей определены константы
В57600B115200В230400setserialДополнительные функции
Есть небольшое число дополнительных функций для управления терминалами. Они работают непосредственно с дескрипторами файлов без необходимости считывания и записывания структур типа
termios<b>#include <termios.h></b><b>int tcdrain(int fd);</b><b>int tcflow(int fd, int flowtype);</b><b>int tcflush(int fd, int in_out_selector);</b>Функции предназначены для следующих целей:
□
tcdrain□
tcflow□
tcflushТеперь, когда мы уделили довольно много внимания структуре
termiosechotermios1. Начните вашу программу password.с со следующих определений:
#include <termios.h>#include <stdio.h>#include <stdlib.h>#define PASSWORD_LEN 8int main() { struct termios initialrsettings, newrsettings; char password[PASSWORD_LEN + 1];2. Далее добавьте строку, считывающую текущие установки из стандартного ввода и копирующую их в только что созданную вами структуру типа
termios tcgetattr(fileno(stdin), &initialrsettings);3. Создайте копию исходных установок, чтобы восстановить их в конце. Сбросьте флаг
ECHOnewrsettings newrsettings = initialrsettings; newrsettings.с_lflag &= ~ЕСНО; printf("Enter password: ");4. Далее установите атрибуты терминала в newrsettings и считайте пароль. И наконец, восстановите первоначальные значения атрибутов терминала и выведите пароль на экран, чтобы свести на нет все предыдущие усилия по обеспечению безопасности:
if (tcsetattr(fileno(stdin), TCSAFLUSH, &newrsettings) != 0) { fprintf(stderr, "Could not set attributesn"); } else { fgets(password, PASSWORD_LEN, stdin); tcsetattr(fileno(stdin), TCSANOW, &initialrsettings); fprintf(stdout, "nYou entered %sn", password); } exit(0);}Когда вы выполните программу, то увидите следующее:
$ <b>./password</b>Enter password: You entered hello$Как это работает
В этом примере слово
helloEnter password:Будьте осторожны и изменяйте с помощью конструкции
X&=~FLAGFLAGXX|=FLAGFLAG
