重複の可能性:
端末でのパスワード入力を非表示
Linux で C 言語を使用したパスワード プログラムの解決策を教えてください。
パスワードの最初の文字を入力すると、ウィンドウが表示されます
password:*-
入力した文字の代わりに。
次の文字を入力すると、ウィンドウが表示されます
password**-
最大 8 文字で、パスワードも確認します。
重複の可能性:
端末でのパスワード入力を非表示
Linux で C 言語を使用したパスワード プログラムの解決策を教えてください。
パスワードの最初の文字を入力すると、ウィンドウが表示されます
password:*-
入力した文字の代わりに。
次の文字を入力すると、ウィンドウが表示されます
password**-
最大 8 文字で、パスワードも確認します。
read -s -n 8 -p "password:" mypassword
-s
パスワード入力プロンプトに
-n
する 文字数を制限するプロンプトを
-p STRING
設定する
$mypassword
入力されたパスワードは、後で使用するために変数に保存されます。
Linux のコマンド ラインでは通常、パスワードを入力するときに代替文字が表示されないため、このコマンドには代替文字を表示するオプションがありません。それでも、それはあなたが探しているものの良い近似です.
C 機能の使用:
/* no test */
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
static void
changeMode(bool b)
{
static struct termios cooked;
static int raw_actived = 0;
if (raw_actived == b) return;
if (b) {
struct termios raw;
tcgetattr(STDIN_FILENO, &cooked);
raw = cooked;
cfmakeraw(&raw);
tcsetattr(STDIN_FILENO, TCSANOW, &raw);
} else {
tcsetattr(STDIN_FILENO, TCSANOW, &cooked);
}
raw_actif = b;
}
static void
clean(void)
{
int c;
do
c = getchar();
while (c != '\n' && c != EOF);
}
void
askPassword(char *s, size_t n)
{
changeMode(1);
for (size_t i = 0; i < n; ++i) {
s[i] = getchar();
clean();
putchar('*');
}
changeMode(0);
}