LINUX.ORG.RU

fgets password


0

0

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

anonymous

Re: fgets password

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

anonymous ()
Ответ на: Re: Re: fgets password от anonymous

Re: Re: Re: fgets password

нет во 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 ()
Ответ на: Re: Re: Re: fgets password от anonymous

Re: Re: Re: Re: fgets password

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

anonymous ()
Ответ на: Re: Re: Re: Re: fgets password от anonymous

Re: Re: Re: Re: Re: fgets password

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

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

anonymous ()
Ответ на: Re: Re: Re: Re: Re: fgets password от anonymous

Re: Re: Re: Re: Re: Re: fgets password

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

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