How can I make my program not echo input?

原文地址:http://www.sbin.org/doc/unix-faq/programmer/faq_4.html

 

How can I make my program not echo input, like login does when asking for your password?

There is an easy way, and a slightly harder way:

The easy way, is to use getpass(), which is probably found on almost all Unices. It takes a string to use as a prompt. It will read up to anEOF or newline and returns a pointer to a static area of memory holding the string typed in.

The harder way is to use tcgetattr() and tcsetattr(), both use astruct termios to manipulate the terminal. The following two routines should allow echoing, and non-echoing mode.

#include <stdlib.h>
#include <stdio.h>

#include <termios.h>
#include <string.h>

static struct termios stored_settings;

void echo_off(void)
{
    struct termios new_settings;
    tcgetattr(0,&stored_settings);
    new_settings = stored_settings;
    new_settings.c_lflag &= (~ECHO);
    tcsetattr(0,TCSANOW,&new_settings);
    return;
}

void echo_on(void)
{
    tcsetattr(0,TCSANOW,&stored_settings);
    return;
}

Both routines used, are defined by the POSIX standard.

 

你可能感兴趣的:(linux,echo,termios)