一个函数,可以在输入密码时,不现实密码

这个功能挺好玩的撒

 

/*
 * =====================================================================================
 *
 *       Filename:  getpass.c
 *
 *    Description: 
 *
 *        Version:  1.0
 *        Created:  09/15/2010 01:53:04 PM
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  YOUR NAME (),
 *        Company: 
 *
 * =====================================================================================
 */
#include <signal.h>
#include <stdio.h>
#include    <termios.h>
#include    <stdlib.h>

#define     MAX_PASS_LEN    8

char *
getpass(const char *prompt)
{
    static  char    buf[MAX_PASS_LEN + 1]; /* null at the end */
    char            *ptr;
    sigset_t        sig, osig;
    struct termios  ts, ots;
    FILE            *fp;
    int             c;

    if ((fp = fopen(ctermid(NULL), "r+")) == NULL)
        return NULL;
    setbuf(fp, NULL);

    sigemptyset(&sig);
    sigaddset(&sig, SIGINT);
    sigaddset(&sig, SIGTSTP);
    sigprocmask(SIG_BLOCK, &sig, &osig);

    tcgetattr(fileno(fp), &ts);
    ots = ts;
    ts.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL);
    tcsetattr(fileno(fp), TCSAFLUSH, &ts);
    fputs(prompt, fp);

    ptr = buf;
    while ((c = getc(fp)) != EOF && c != '/n')
        if (ptr < &buf[MAX_PASS_LEN])
            *ptr++ = c;
    *ptr = 0;
    putc('/n', fp);

    tcsetattr(fileno(fp), TCSAFLUSH, &ots);
    sigprocmask(SIG_SETMASK, &osig, NULL);
    fclose(fp);
    return buf;
}

int
main(void)
{
    char   *ptr;

    if ((ptr = getpass("Enter password:")) == NULL)
    {
        printf("getpass error/n");
        return 0;
    }

    printf("password is : %s/n", ptr);
    return 0;
}

 

你可能感兴趣的:(struct,File,gcc,null,FP,compiler)