考慮下面的代碼:輸入回顯在Linux終端中如何工作?
#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但是,當連接到遠程計算機時,輸入通常回聲緩慢,如果連接速度慢... – aschepler
回聲似乎以許多不同的方式處理。也許https://en.wikipedia.org/wiki/Echo_%28computing%29可以揭示一些事情。 –