Hide password input on terminal

后端 未结 15 1390
清酒与你
清酒与你 2020-11-22 09:55

I want to mask my password while writing it with *. I use Linux GCC for this code. I know one solution is to use getch() function like this

15条回答
  •  逝去的感伤
    2020-11-22 10:45

    You might use ncurses.h if it is not necessary to be portable onto Windows for that, but here is some kind of a more "portable" version:

    If it is not necessery to be portable ill point you to a ncurses solution

    portablegetch.h

    /*portablegetch.h*/
    #ifndef PGETCH
    #define PGETCH
    #ifdef __unix__
    #include 
    #include 
    
    static struct termios n_term;
    static struct termios o_term;
    
    static int
    cbreak(int fd) 
    {
       if((tcgetattr(fd, &o_term)) == -1)
          return -1;
       n_term = o_term;
       n_term.c_lflag = n_term.c_lflag & ~(ECHO|ICANON);
       n_term.c_cc[VMIN] = 1;
       n_term.c_cc[VTIME]= 0;
       if((tcsetattr(fd, TCSAFLUSH, &n_term)) == -1)
          return -1;
       return 1;
    }
    
    int 
    getch() 
    {
       int cinput;
    
       if(cbreak(STDIN_FILENO) == -1) {
          fprintf(stderr, "cbreak failure, exiting \n");
          exit(EXIT_FAILURE);
       }
       cinput = getchar();
       tcsetattr(STDIN_FILENO, TCSANOW, &o_term);
    
       return cinput;
    }
    
    #elif _MSC_VER  || __WIN32__ || __MS_DOS__
      #include 
    #endif
    #endif
    

    And the c-file

    whatever.c

    #include 
    #include 
    #include "portablegetch.h"
    
    int 
    main(int argc, char **argv) 
    {
      int input;
    
      printf("Please Enter your Password:\t");
    
      while(( input=getch() ) != '\n')
            printf("*");
      printf("\n");
    
      return EXIT_SUCCESS;
    }
    

    That should fit to your problem.

    Hope that helps.

提交回复
热议问题