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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.