Bootstrap

输入密码以星号显示

  1. #include <stdio.h>      
  2. #include <stdlib.h>      
  3. #include <termios.h>     
  4. #include <unistd.h>       
  5. #include <string.h>   
  6. #include <errno.h>    
  7.     
  8. char Getch()      
  9. {    
  10.     int c = 0;      
  11.     int res = 0;        
  12.     struct termios org_opts, new_opts;     
  13.     res = tcgetattr(STDIN_FILENO, &org_opts);   //用于获取与终端相关的参数    
  14.     if(res == -1)  
  15.     {  
  16.         printf("tcgetattr error! Error code: %d,Error message: %s\n", errno, strerror(errno));   
  17.         c = '\n';  
  18.         return c;  
  19.     }  
  20.       
  21.     memcpy(&new_opts, &org_opts, sizeof(new_opts));    
  22.     new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);   
  23.       
  24.     res = tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);   //用于设置终端参数  
  25.     if(res == -1)  
  26.     {  
  27.         printf("tcsetattr error! Error code: %d,Error message: %s\n", errno, strerror(errno));   
  28.         c = '\n';  
  29.         return c;  
  30.     }  
  31.     c = getchar();        
  32.     res = tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);   
  33.     if(res == -1)  
  34.     {  
  35.         printf("tcsetattr error! Error code: %d,Error message: %s\n", errno, strerror(errno));   
  36.         c = '\n';  
  37.         return c;  
  38.     }  
  39.       
  40.     return c;    
  41. }    
  42.   
  43.   
  44. char *GetPasswd()  
  45. {  
  46.     char *strRet = (char *)malloc(64);  
  47.     memset(strRet, 0, 64);  
  48.       
  49.     unsigned char c;  
  50.     int i = 0;  
  51.       
  52.     while ((c = Getch()) != '\n')  
  53.     {  
  54.         if (i<64 && isprint(c))  
  55.         {  
  56.             strRet[i++] = c;  
  57.             putchar('*');  
  58.         }  
  59.         else if ((i>0) && (c == '\b'))  
  60.         {  
  61.             --i;  
  62.             putchar('\b');  
  63.             putchar(' ');  
  64.             putchar('\b');  
  65.         }  
  66.     }  
  67.     strRet[i] = '\0';  
  68.       
  69.     return strRet;  
  70. }  
  71.   
  72.   
  73. int main()  
  74. {  
  75.     printf("\n输入的密码为:%s\n",GetPasswd());    
  76.     return 0;   
  77. }  
;