16.3. Примеры использования termios
16.3. Примеры использования termios
16.3.1. Пароли
Самой распространенной причиной модификации установок termios является чтение пароля без эхо-контроля символов. Для этого следует отключить локальное эхо во время чтения пароля. Ваш код должен выглядеть следующим образом:
struct termios ts, ots;
Первая структура хранит оригинальные установки для восстановления, а вторая является копией для модификации.
tcgetattr(STDIN_FILENO, &ts);
Обычно пароли читаются со стандартного устройства ввода.
ots = ts;
Сохраните копию оригинальных установок termios, чтобы позже восстановить их.
ts.c_lflag &= ~ECHO;
ts.c_lflag |= ECHONL;
tcsetattr(STDIN_FILENO, TCSAFLUSH, fits);
Отключите эхо-контроль символов (кроме символов новой строки) после завершения обработки всех выходных данных. (Первая l в c_lflag означает локальную (local) обработку.)
read_password();
Теперь вы читаете пароль. Это может быть простой вызов fgets() или read(), либо же более сложная обработка, в зависимости от режима tty (неформатируемый режим или режим обработки) и от требований программы.
tcsetattr(STDIN_FILENO, TCSANOW, &ots);
Это немедленно восстанавливает исходные установки termios. (Остальные опции объясняются позже, в справочном разделе далее в главе.)
Полный код программы-примера, readpass, показан ниже.
1: /* readpass.с */
2:
3: #include <stdio.h>
4: #include <stdlib.h>
5: #include <termios.h>
6: #include <unistd.h>
7:
8: int main (void) {
9: struct termios ts, ots;
10: char passbuf[1024];
11:
12: /* получить и сохранить текущие настройки termios */
13: tcgetattr(STDIN_FILENO, &ts);
14: ots = ts;
15:
16: /* изменить и установить новые настройки termios */
17: ts.c_lflag & = ~ECHO;
18: ts.c_lflag |= ECHONL;
19: tcsetattr(STDIN_FILENO, TCSAFLUSH, &ts);
20:
21: /*хоть это и параноидально, но проверить, возымели ли эффект новые настройки*/
22: tcgetattr(STDIN_FILENO, &ts);
23: if (ts.c_lflag & ECHO) {
24: fprintf(stderr, "Сбой при отключении эхо-контроля ");
25: tcsetattr(STDIN_FILENO, TCSANOW, &ots);
26: exit(1);
27: }
28:
29: /* получить и вывести пароль */
30: printf("введите пароль:");
31: fflush(stdout);
32: fgets(passbuf, 1024, stdin);
33: printf("прочитан пароль: %s", passbuf);
34: /* в passbuf был завершающий символ */
35:
36: /* восстановить старые настройки termios */
37: tcsetattr(STDIN_FILENO, TCSANOW, &ots);
38:
39: exit(0);
40: }
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Примеры использования ADODB
Примеры использования ADODB Для создания примеров работы с IBProvider через ADODB был применен Visual Basic for Application (VBA) из Microsoft Excel 97. Для использования ADODB-компонентов нужно их добавить в список библиотек, употребляемых Visual Basic Для этого:* Откройте редактор кода Visual Basic (Alt+Fl 1).* Выберите
Примеры использования библиотеки классов
Примеры использования библиотеки классов Для написания и тестирования примеров использовался Borland C++ Builder 3-й версии (с установленным пакетом исправлений, который доступен для скачивания на сайте компании Borland). Библиотека классов самостоятельно конфигурируется под
1.2. Примеры использования Windows API
1.2. Примеры использования Windows API В этом разделе разобраны простые примеры, находящиеся на компакт-диске. Все эти примеры уже упоминались ранее, и каждый из них иллюстрирует какую-то отдельно взятую возможность API. Более сложным обобщающим примерам, которые задействуют
Фильтры и примеры их использования
Фильтры и примеры их использования Фильтры – удобное средство поиска и отображения нужных данных в таблице Excel. Используя фильтры, вы можете отобразить в таблице только те данные, которые вам нужны в данный момент. Например, если вы работаете с определенной группой
Примеры использования тегов итераторов
Примеры использования тегов итераторов Для всех типов обычных указателей мы можем определить value_type и distance_type с помощью следующего:template ‹class T›inline T* value_type(const T*) {return (T*)(0);}template ‹class T›inline ptrdiff_t* distance_type(const T*) {return (ptrdiff_t*)(0);}Тогда, если мы хотим осуществить обобщённую функцию
Примеры использования
Примеры использования Следующий оператор возвращает время сервера в момент, когда сервер обслуживает запрос клиента Firebird:SELECT CURRENT_TIME AS TIME_FINISHED FROM RDB$DATABASE;В следующем операторе добавления идентификатор текущей транзакции, текущие серверные дата и время, а также имя
5.11.3. Примеры использования команды mount
5.11.3. Примеры использования команды mount Теперь, когда мы знаем номер раздела, можно его подмонтировать. В общем случае сначала командой mkdir создается точка монтирования (каталог, куда будет монтироваться раздел): sudo mkdir <точка монтирования> Затем к этой точке командой mount
ГЛАВА 7: ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ СИСТЕМ
ГЛАВА 7: ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ СИСТЕМ Далее я привожу лучшие, на мой взгляд, системы, которые наиболее полно отражают системный подход к управлению делами.СИСТЕМА БЛОГГЕРА ДАРРЕНА КРОУФОРДАЯ искал несколько дней простой способ интегрировать Evernote с моей системой GTD. Я
Примеры использования
Примеры использования Объенение всех файлов, расположенных в заданной директории Задача: объединить три файла: 1.txt, 2.txt, 3.txt.1. Сделайте новую директорию (скажем, files) и скопируйте в нее 1.txt, 2.txt, 3.txt;2. Выберите «txt» в «file type»;3. Нажмите «path» и выберите директорию files;4. Нажмите
Простые примеры использования book corrector
Простые примеры использования book corrector Преобразование заголовка в параграф 1. Кликните дважды на заголовок, который Вы хотите преобразовать в параграф.2. Нажмите иконку BookCorrector "paragraph" или кликните правой кнопкой мышки внутри основного окна BookDesigner и затем нажмите "paragraph" в
1.4.2. Примеры использования команды chmod
1.4.2. Примеры использования команды chmod Рассмотрим несколько примеров изменения режима доступа к файлу с помощью команды chmod. Предполагается, что строка режима для нашего файла имеет такой вид: rwxrwxrwx. Команда Строка режима Результат chmod a?x myfile rw?rw?rw- Отмена всех разрешений
1.4.4. Дополнительные примеры использования команды chmod
1.4.4. Дополнительные примеры использования команды chmod Ниже приведен ряд Примеров, иллюстрирующих применение команды chmod в абсолютном режиме: Команда Строка режима Результат chmod 666 rw?rw?rw- Установка разрешений на чтение и запись для владельца, группы и других
10.16. Дополнительные примеры использования редактора sed
10.16. Дополнительные примеры использования редактора sed Выше были описаны основные команды sed. Далее мы рассмотрим ряд практических примеров применения редактора