首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux C 語言控制台密碼隱藏輸入實現方案:關閉回顯與 termios 設置

     編輯:程式設計綜合問答
問題
Linux 標準 C 庫無 getch(),scanf 會回顯輸入字符,不適合密碼輸入。

核心方案:termios 關閉回顯模式

#include 
#include 
#include 

int getch_hidden() {
    struct termios oldt, newt;
    int ch;
    tcgetattr(STDIN_FILENO, &oldt);           // 保存當前屬性
    newt = oldt;
    newt.c_lflag &= ~(ECHO | ICANON);         // 關閉回顯、規范模式
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);  // 立即生效
    ch = getchar();                           // 讀取單字符
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);  // 恢復原屬性
    return ch;
}

int main() {
    char pwd[32] = {0};
    printf("Password: ");
    for (int i = 0; i < 31; i++) {
        int c = getch_hidden();
        if (c == '\n' || c == '\r' || c == EOF) break;
        pwd[i] = c;
        putchar('*'); // 可選:顯示掩碼字符
    }
    printf("\nInput: %s\n", pwd);
    return 0;
}

關鍵點

  • ECHO:控制輸入字符是否回顯到終端。
  • ICANON:關閉規范模式後,getchar() 可逐字符讀取,無需等待回車。
  • 務必在讀取結束後恢復終端屬性,否則後續 Shell 操作異常。

參考資源

CSDN 下載:Linux 密碼隱藏輸入完整代碼

總結

通過 termios 動態修改終端屬性,實現無回顯、逐字符讀取的密碼輸入體驗,跨 Linux/Unix 平台通用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved