【发布时间】:2014-06-12 13:55:32
【问题描述】:
考虑以下代码:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
void disable_echoing()
{
termios t;
tcgetattr(STDIN_FILENO, &t);
t.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &t);
}
int main()
{
sleep(1);
printf("disabling echoing\n");
disable_echoing();
getchar();
}
此程序会休眠一秒钟,然后禁用输入字符的回显,然后读取输入字符。
如果我在禁用回显后键入输入字符,则不会回显该字符。到目前为止,一切顺利。
如果我在禁用回显之前键入输入字符,则会回显该字符。但此时程序正在休眠。我的问题是:如果程序正在休眠,那么回显是什么?
我问这个问题的动机是 Windows 上的一个类似程序(显然禁用回显的具体机制不同)表现不同:即使我在程序休眠时键入输入字符,也不会发生回显,然后当程序从睡眠中唤醒它会在运行执行回显的代码之前禁用回显 (getchar()),因此仍然不会发生回显。
【问题讨论】:
-
可能是你的终端程序...
-
@MarcusRickert 但是当连接到远程计算机时,如果连接速度很慢,输入通常会回显缓慢......
-
回声似乎有很多不同的处理方式。也许en.wikipedia.org/wiki/Echo_%28computing%29 可以对此有所了解。