回答
您可以通过getpass
帮助做到这一点。但是man getpass说
此功能已过时。不要使用它。如果要在未启用终端回显的情况下读取输入,请参阅termios(3)中ECHO标志的说明。
这段代码就可以了(此代码是其他SO
后精确副本)
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <string.h>
int main(int argc, char **argv)
{
struct termios oflags, nflags;
char password[128];
tcgetattr(fileno(stdin), &oflags);
nflags = oflags;
nflags.c_lflag &= ~ECHO;
nflags.c_lflag |= ECHONL;
if (tcsetattr(fileno(stdin), TCSADRAIN, &nflags) != 0) {
perror("tcsetattr");
return -1;
}
printf("\npassword(Echo Disabled) : ");
fgets(password, sizeof(password), stdin);
password[strlen(password) - 1] = 0;
printf("Entered password : %s\n", password);
if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
perror("tcsetattr");
return -1;
}
printf("\npassword(Echo Enabled) : ");
fgets(password, sizeof(password), stdin);
password[strlen(password) - 1] = 0;
printf("Entered password : %s\n", password);
return 0;
}
Explantion:
- 获取使用
tcgetattr()
用于恢复终端在termios structure
终端当前属性更新的属性。 - 创建新的
termios structure
并在termios structure
成员中设置禁用回显标志。 - 使用
tcsetattr
从新的termios structure
中设置新的终端属性。 - 如果要启用回显,请使用
tcsetattr
再次设置旧保存的终端属性。即恢复终端到原来的状态
感谢您让我避免使用过时的方法! – Nullpointer
在使用之前,请务必阅读系统调用的手册页。 – sujin
您可以使用getpass
#include <unistd.h>
...
char *password = getpass("Password: ");
...
谢谢!这工作! – Nullpointer
使用了getpass()或另一种方式是低于
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
int
main(int argc, char **argv)
{
struct termios oflags, nflags;
char password[64];
/* disabling echo */
tcgetattr(fileno(stdin), &oflags);
nflags = oflags;
nflags.c_lflag &= ~ECHO;
nflags.c_lflag |= ECHONL;
if (tcsetattr(fileno(stdin), TCSANOW, &nflags) != 0) {
perror("tcsetattr");
return EXIT_FAILURE;
}
printf("password: ");
fgets(password, sizeof(password), stdin);
password[strlen(password) - 1] = 0;
printf("you typed '%s'\n", password);
/* restore terminal */
if (tcsetattr(fileno(stdin), TCSANOW, &oflags) != 0) {
perror("tcsetattr");
return EXIT_FAILURE;
}
return 0;
}
- 1. 如何在不显示密码的情况下下载文件?
- 2. 如何仅在密码不为空的情况下对密码进行加密
- 3. 如何在不输入密码的情况下发送用户名和密码?
- 4. 终端密码
- 5. mysqlcheck的不接受密码
- 6. 如何在没有密码的情况下连接ssh2 nodejs
- 7. 如何在没有密码提示的情况下执行mysqldump?
- 8. 如何在不输入密码的情况下换行?
- 9. asp.net会员在不知道旧密码的情况下更改密码
- 10. 在不知道现有密码的情况下修改用户密码
- 11. 如何在不知道密码的情况下重置密钥库?
- 12. Postgresql将不接受密码
- 13. apksigner不接受密码
- 14. 在不使用密码的情况下在Java中实现RSA
- 15. 如何在不使用原始密码的情况下更改密钥库密码?
- 16. 在密码加密的情况下登录用户
- 17. 在不知道密码的情况下解锁受保护的工作簿
- 18. MySQL接受任何密码
- 19. 显示以下JS代码的密码
- 20. 如何在不提示输入密码的情况下使用runas?
- 21. 如何在不询问密码提示的情况下自动化rsync
- 22. 如何在不提示输入密码的情况下部署Capistrano?
- 23. 如何在不提示的情况下创建shell脚本来更改密码?
- 24. 如何在不使用密码的情况下检查ASP.NET Membership中的问题和密码是否正确
- 25. 如何在不使用旧密码的情况下重置python中的常见ldap用户密码?
- 26. 如何在没有密码的情况下使用SSH登录
- 27. 如何在忘记密码的情况下恢复.pem文件
- 28. 如何在没有SSH的情况下'git pull' - 或 - 密码?
- 29. 如何在无密码的情况下创建stormpath用户?
- 30. 如何在没有密码的情况下访问Cmis?
也了解[ncurses的(HTTP://www.gnu。 org/software/ncurses /) –