【问题标题】:The meaning of disabling local echo in terminal终端禁用本地回显的含义
【发布时间】:2013-07-23 07:16:46
【问题描述】:

我有一个在 Linux 操作系统上运行的 c 应用程序。此应用程序从终端获取键盘键并将它们发送到远程服务器。
下面的代码打开终端:

    // save old terminal attributes
if (tcgetattr(0, &ttyold) != 0) {
    fprintf(stderr, "Failed getting terminal attributes\n");
    goto out;
}

ttynew = ttyold;

ttynew.c_iflag = 0;
ttynew.c_oflag = 0;

// disable canonical mode (don't buffer by line)
ttynew.c_lflag &= ~ICANON;

// disable local echo
ttynew.c_lflag &= ~ECHO;

ttynew.c_cc[VMIN] = 1;
ttynew.c_cc[VTIME] = 1;

// set new terminal attributes 
if (tcsetattr(0, TCSANOW, &ttynew) != 0) {
    fprintf(stderr, "Failed setting terminal attributes\n");
    goto out;

我没有编写这个应用程序,我只是想理解这段代码。 我不明白为什么以前的工程师禁用了回声?必须发送的数据不是秘密。这还有什么意义?表现?禁用缓冲?
另外,我很高兴得到“ttynew.c_lflag &= ~ICANON;”的解释代码。

提前致谢。

【问题讨论】:

  • 最好的办法是问他..
  • 他离开了我们的开发团队....

标签: c terminal echo


【解决方案1】:

如果接收端没有回显,则需要开启此项。如果接收端回显,则禁用它,否则最终会看到所有内容都加倍。

Here一切都解释清楚了:

在规范模式下:输入逐行可用。当输入行分隔符之一(NL、EOL、EOL2;或在行首的 EOF)时,输入行可用。

基本上,数据在 EOL 之后发送,而不是按字符发送。

【讨论】:

  • 我不太了解你:当我禁用回显时,字符在本地终端(在客户端)中不可见。为什么它与接收方有关?我正在通过 TCP 协议发送数据...
  • 不明白你对回声的回答
  • 我认为它只适用于终端仿真。您可以尝试打开它,看看会发生什么。另一方面,如果它有效,请不要修复它。
猜你喜欢
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多