Linux终端不回显


一直想在Linux下写段程序试试输入不回显的东西,但是一直被一些事情所羁绊(其实是自己懒,玩游戏去了),直到最近要在公司的代码上加东西。

于是乎,一轮 google 以后,终于找到了答案,其实是因为自己看APUE看的头晕了。代码很简单,先用 tcgetattr 取到现有的属性,然后在现有属性上设置 XXX.c_lflag &= ~ECHO ,再用 tcsetattr 把新属性给设置上去,就行了,对于两个终端相关的函数,需要提供 fd ,对于 stdin 而言是 0 ,话说不知道为啥昨天直接写 stdin 不行,下面呢,木有了。

PS:突然想到,代码贴上来是不是好一点?于是下面又有了:

1 #include
2 #include
3 #include
4 #include
5
6
7 int main (int argc, char* argv[])
8 {
9 struct termios init_setting;
10 struct termios pend_setting;
11
12 if (tcgetattr(0, &init_setting) < 0)
13 {
14 fprintf (stderr, “Error~~~\n“);
15 exit (1);
16 }
17 pend_setting = init_setting;
18
19 printf (“Pending for 5 secone!\n“);
20 pend_setting.c_lflag &= ~ECHO;
21 tcsetattr (0, TCSANOW, &pend_setting);
22 sleep (5);
23
24 return 0;
25 }

来自:湖间小筑

相关内容