我在下面有一个非常简单的C函数:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我在linux os终端上使用gcc来测试它.结果是:
d
d
e
e
f
f
5
5
56
56
Run Code Online (Sandbox Code Playgroud)
我只想知道:
1.为什么每次按下我的回车键,终端都会重复我输入的字符?
2.为什么我放两个字符(56),这也有效,它是如何工作的?
3.为什么只有Enter键使终端重复,而不是其他键?
4.在Linux终端或像这样的C程序中按Enter键是什么意思?
终端输入通过称为"tty"的内核特定对象进行管理.此tty缓冲您在输入数据之前(默认情况下)输入的内容.这非常有用,因为它允许您(作为用户)在将命令行发送到进程之前更正它.Tty缓冲通常处于行模式,这意味着如果缓冲区已满或输入了换行符,则会传送输入数据.
因此,当您键入单个char时,该进程无法使用该char,它位于tty缓冲区内.然后键入一个新行,两个都可供您的进程使用,然后可以读取第一个,将其推送到输出然后读取换行并将其推送到输出.
可以更改Tty的行为stty,例如参见命令.我鼓励您阅读"POSIX终端".