在 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++ 编程时,我应该使用啥函数来输入密码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章