簡體   English   中英

如何更改linux終端中的echo字符

[英]How to change the echo character in a linux terminal

我有興趣從用戶那里收集密碼。

當提示用戶輸入密碼時,我想回復他們輸入的每個字符*(星號)。

void changeEcho() {
    termios term;
    tcgetattr(STDIN_FILENO, &term);
    term.c_lflag &= ~ECHO;
    tcsetattr(STDIN_FILENO, TCSANOW, &term);
}

我知道這會消除回聲,但我有興趣回應我選擇的東西,在我的情況下'*'。

您描述的功能與回聲無關。 相反,您只需讀取一個字符並在循環中編寫*即可自行實現它:

#include <termios.h>
#include <unistd.h>
#include <stdio.h>


int main() {
    char c;
    char p = '*';
    struct termios term, original;
    tcgetattr(STDIN_FILENO, &term);
    original = term;
    term.c_lflag &= ~ECHO & ~ICANON;
    tcsetattr(STDIN_FILENO, TCSANOW, &term);

    while (read(STDIN_FILENO, &c, 1) == 1 && c != '\n')
        write(STDOUT_FILENO, &p, 1);
    printf("\n");

    tcsetattr(STDIN_FILENO, TCSANOW, &original);
    return 0;
}

當你運行它並輸入東西時,你看到的只是* s:

$ gcc foo.c && ./foo
***********

由程序來存儲字符串,處理退格鍵,並且每個多字節字符只顯示一個*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM