Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu中使用C语言的密码程序_C_Linux_Passwords - Fatal编程技术网

Ubuntu中使用C语言的密码程序

Ubuntu中使用C语言的密码程序,c,linux,passwords,C,Linux,Passwords,可能重复: 请给我一个在Linux中使用C语言的密码程序的解决方案 当我们输入密码的第一个字母时,应显示窗口 password:*- 而不是输入的字母 当我们输入下一个字符时,将显示窗口 password**- 最多8个字符 并验证密码 read -s -n 8 -p "password:" mypassword -s使其成为密码输入提示 -n限制字符数 -p STRING设置提示 输入的密码保存在$mypassword变量中,以供进一步使用 在linux命令行中,输入密码时通常不显示替

可能重复:

请给我一个在Linux中使用C语言的密码程序的解决方案

当我们输入密码的第一个字母时,应显示窗口

password:*-
而不是输入的字母

当我们输入下一个字符时,将显示窗口

password**-
最多8个字符 并验证密码

read -s -n 8 -p "password:" mypassword
-s
使其成为密码输入提示
-n
限制字符数
-p STRING
设置提示

输入的密码保存在
$mypassword
变量中,以供进一步使用

在linux命令行中,输入密码时通常不显示替换字符,因此该命令不提供这样做的选项。尽管如此,它还是一个很好的近似于您正在寻找的内容

-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);
}
/*无测试*/
#包括
#包括
#包括
静态空隙
转换模式(bool b)
{
静态结构术语;
静态int raw_actived=0;
if(raw_actived==b)返回;
如果(b){
结构termios raw;
tcgetattr(标准文件号和熟的);
生=熟;
cfmakeraw(&raw);
tcsetattr(标准文件号、TCSANOW和原始文件);
}否则{
tcsetattr(标准文件号、TCSANOW和熟的);
}   
原始活动=b;
}
静态空隙
清洁(无效)
{
INTC;
做
c=getchar();
而(c!='\n'&&c!=EOF);
}
无效的
askPassword(字符数,大小)
{
转换模式(1);
对于(尺寸i=0;i
使用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);
}
/*无测试*/
#包括
#包括
#包括
静态空隙
转换模式(bool b)
{
静态结构术语;
静态int raw_actived=0;
if(raw_actived==b)返回;
如果(b){
结构termios raw;
tcgetattr(标准文件号和熟的);
生=熟;
cfmakeraw(&raw);
tcsetattr(标准文件号、TCSANOW和原始文件);
}否则{
tcsetattr(标准文件号、TCSANOW和熟的);
}   
原始活动=b;
}
静态空隙
清洁(无效)
{
INTC;
做
c=getchar();
而(c!='\n'&&c!=EOF);
}
无效的
askPassword(字符数,大小)
{
转换模式(1);
对于(尺寸i=0;i
这只是一个想法,所以你可以试试看,也可以不试试

一开始,您必须将终端转换为非回声模式。这样,就不会显示用户的输入。(Termios设置)

从变量计数器开始。您创建一个循环(while),并在其中使用read函数或getchar获取每个输入。
接下来,检查输入是否正确。在终端上写“*”或什么都不写。

这只是一个想法,所以你可以试试,也可以不试试

一开始,您必须将终端转换为非回声模式。这样,就不会显示用户的输入。(Termios设置)

从变量计数器开始。您创建一个循环(while),并在其中使用read函数或getchar获取每个输入。
接下来,检查输入是否正确。在终端上写“*”或什么都不写。

他清楚地说明了C语言,而不是shell。但是,通过POSIX系统(“读取…”)调用仍然很有用。@LukaRamishvili:你的意思是
popen
?我看不出它在
系统中有什么用处。提示?是的,你是对的,如果他想读回输入的密码,他需要打开一个管道,而不仅仅是调用(虽然使用system()调用可以实现视觉效果,但可能还不够)。他清楚地说明了C语言,而不是shell。但是,通过POSIX系统(“读取…”)调用仍然很有用。@LukaRamishvili:你的意思是
popen
?我看不出它在
系统中有什么用处。提示?是的,你是对的,如果他想读回输入的密码,他需要打开一个管道,而不仅仅是调用(虽然使用system()调用可以实现视觉效果,但这可能是不够的)。在这里也可以看到答案(),完全相同的问题。@Dhaneesh:这就是问题的全部要点。为什么不读一下答案呢?在这里也可以看到答案(),完全相同的问题。@Dhaneesh:这就是问题的重点。为什么不读答案呢?上一篇文章反映了这个想法。上一篇文章反映了这个想法。