LINUX.ORG.RU

fgets password


0

0

Добрый день всем программистам.
В консольной программе на С запрашивается пользователь и два раза его пароль. Запросы сделал fgets(str, size, stdin). Необходимо, что бы при вводе пароля символы не отображались на экран (то есть отображалось все кроме символов пароля). Перенаправление stdout ничего не дало (все сообщения пропали, а сиволы пароля все равно печатаются). Куда fgets направляет эхо вводимых символов? На каком принципе (если не на fgets) лучше сделать скрытие вводимых символов?
Заранее благодарен за помощь.

anonymous

Отвечаю сам на свой вопрос(может кому пригодится).
Стандартной функцией getpass() (#include <unistd.h>).

anonymous
()
Ответ на: комментарий от anonymous

нет во tcgetattr и tcsetattr

struct termios tsaved,tmp;

tcgetattr(0,&tsaved);
tcgetattr(0,&tmp);
tsaved.c_lflag &=~ICANON;
tsaved.c_lflag &=~ECHO;
tcsetattr(0,TCSAFLUSH,&tsaved);

anonymous
()
Ответ на: комментарий от anonymous

Все заработало кроме одного. У меня после работы программы терминал сбился. Как вернуть настройки назад?

anonymous
()
Ответ на: комментарий от anonymous

> Все заработало кроме одного. У меня после работы программы терминал сбился. Как вернуть настройки назад?

Отвечаю сам на свою реплику (Прошу прощения за невнимательность).
Просто восстанавливаю данные из временной структуры (tcsetattr(0,TCSAFLUSH,&tmp);).
Благодарен за советы.

anonymous
()
Ответ на: комментарий от anonymous

Ну что же за страсть наступать на уже затоптанные грабли ?
Может к документации обратиться :

Unix Programming Frequently Asked Questions
(http://www.erlenstar.demon.co.uk/unix/faq_toc.html)

3. Terminal I/O
3.1 How can I make my program not echo input?
...


anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.