在 linux 上,使用 C/C++ 编程时,我应该使用啥函数来输入密码? [复制]

Posted

技术标签:

【中文标题】在 linux 上,使用 C/C++ 编程时,我应该使用啥函数来输入密码? [复制]【英文标题】:On linux, when programming with C/C++, what function should I use for inputting password? [duplicate]在 linux 上,使用 C/C++ 编程时,我应该使用什么函数来输入密码? [复制] 【发布时间】:2020-11-24 01:50:07 【问题描述】:

我使用的是 Ubuntu20.04。在使用 C/C++ 进行编程以创建 CLI 应用程序时,我希望能够输入诸如密码之类的私有内容。特别是,当我输入密码时,我需要我的输入不显示在屏幕上。


更新:

不知道为什么因为没有足够的焦点而关闭。我想我已经尽可能具体了:

平台:ubuntu 20.04 语言:C/C++ 我在做什么:创建一个允许我输入密码的 CLI 应用程序。 我想要什么:输入内容在我输入时未显示在我的屏幕上。

【问题讨论】:

为什么投反对票?如果是因为我同时要求 C++ 解决方案和 Python 解决方案,我已经编辑了问题。 @tdelaney:getpass() 的手册页上写着 This function is obsolete. Do not use it. ***.com/questions/1196418/… 可能有用,尽管它使用 c i/o 而不是 c++。 @BillLynch 谢谢。我会看看。 c i/o 也适合我。 不知道为什么投反对票,但问题的标题确实让我觉得很奇怪。按照“获取用户输入而不显示在控制台中”的思路,将标题转向更一般的情况可能会更好。您的问题已经有点针对一般情况,但也有点短。也许您只是简洁,但您可能希望以一般情况为中心的心态重新提出问题。 【参考方案1】:

您可以使用terminal I/O api 来执行此操作。

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

int main()

    struct termios old_tio, new_tio;
    unsigned char c;

    /* get the terminal settings for stdin */
    tcgetattr(STDIN_FILENO,&old_tio);

    /* we want to keep the old setting to restore them a the end */
    new_tio=old_tio;

    /* disable canonical mode (buffered i/o) and local echo */
    new_tio.c_lflag &=(~ICANON & ~ECHO);

    /* set the new settings immediately */
    tcsetattr(STDIN_FILENO,TCSANOW,&new_tio);

    int i = 0;
    char password[100] = 0; // hardcode with max 100 char input
    do 
         c=getchar();
         password[i++] = c;
         printf("*");
     while(c!='\n' || i == 100);

    printf("%s\n", password);

    /* restore the former settings */
    tcsetattr(STDIN_FILENO,TCSANOW,&old_tio);

    return 0;

【讨论】:

以上是关于在 linux 上,使用 C/C++ 编程时,我应该使用啥函数来输入密码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Linux C编程之一:Linux下c语言的开发环境

在 Ubuntu linux 中使用 C/C++ 编程

Linux下c/c++后端开发前景

在 Linux 上用 C 语言读写串口

2021年 Linux 上最佳 C/C++ IDE 和代码编辑器

linux c/c++ 编程是不是支持设置进程优先级?