【发布时间】:2014-02-25 19:49:08
【问题描述】:
Linux 上的 C 语言中是否有任何函数允许等待用户输入而不在终端上显示他正在输入的内容? (就像你在 Linux 终端上输入密码时一样)
我找到了 getch() 但它在 Linux 上不起作用... :(
我找到了这个,但它太复杂了......:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>
int main(void)
{
char buffer[100];
struct termios infos;
int size;
if (tcgetattr(STDIN_FILENO, &infos) == -1)
{
fprintf(stderr, "Erreur tcgetattr.\n");
return (EXIT_FAILURE);
}
infos.c_lflag &= ~ECHO;
if (tcsetattr(STDIN_FILENO, TCSANOW, &infos) == -1)
{
fprintf(stderr, "Erreur tcsetattr.\n");
return (EXIT_FAILURE);
}
if ((size = read(STDIN_FILENO, buffer, sizeof(char) * 100)) == -1)
{
fprintf(stderr, "Erreur durant la lecture.\n");
return (EXIT_FAILURE);
}
buffer[size - 1] = '\0';
printf("le buffer contient [%s]\n", buffer);
return (EXIT_SUCCESS);
}
【问题讨论】:
-
可能重复:stackoverflow.com/questions/1413445/read-a-password-from-stdcin 问题是针对 C++ 的,但它显示了如何禁用
stdin回显模式。 -
为什么这么复杂?另一种选择是使用像 curses 这样的库