【发布时间】:2017-03-28 13:10:29
【问题描述】:
我在下面有一个非常简单的 C 函数:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return EXIT_SUCCESS;
}
我在我的 linux os 终端上使用 gcc 来测试它。
结果是:
d
d
e
e
f
f
5
5
56
56
我只是想知道:
1. 为什么我每次按回车键,终端都会重复我刚才输入的字符?
2. 为什么我放了两个字符(56),这也行,它是如何工作的?
3. 为什么只有回车键使终端重复,其他键不重复?
4. 在 linux 终端或者这样的 C 程序中按 Enter 键是什么意思?
【问题讨论】:
-
代码正在回显您键入的所有内容?有什么令人困惑的?
-
您的应用只是复制输入。有些关于重复的问题很奇怪。
-
请注意
getchar返回int。与EOF相比,这实际上很重要。您的“字符”变量c也应该是int。 -
tty 处于规范模式,只是缓冲数据,直到您点击返回。当您点击返回时,它将缓冲区中的所有内容发送到您的程序。如果您将 tty 置于原始模式,它将更频繁地发送数据。
-
除了您的 TTY 处于规范模式之外,您的标准输入流很可能处于行缓冲模式,因为当标准输入来自 TTY 时,这是 POSIX 中的默认设置。请参阅
setbuf和/或setvbuf函数的描述以更改它。