我在下面有一个非常简单的 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 操作系统终端上使用 gcc 来测试它。
结果是:
d
d
e
e
f
f
5
5
56
56
我只是想知道:
1. 为什么我每次按回车键,终端都会重复我刚输入的字符?
2. 为什么我放了两个字符(56),也行,那是怎么行的?
3、为什么只有回车键让终端重复,其他键没有?
4. 在 linux 终端或像这样的 C 程序中按 Enter 键意味着什么?
最佳答案
终端输入通过称为“tty”的内核特定对象进行管理。此 tty 缓冲您在(默认情况下)将数据传送到您的进程之前输入的内容。这非常有用,因为它允许您(作为用户)在将命令行发送到进程之前更正命令行。 Tty 缓冲通常处于行模式,这意味着如果缓冲区已满或输入换行符,则会传送输入数据。
因此,当您键入单个字符时,该字符对您的进程不可用,它位于 tty 缓冲区内。然后你输入一个新行,两者都可用于你的进程,然后能够读取第一行,将其推送到输出,然后读取换行符并将其推送到输出。
Tty 的行为可以改变,例如参见命令 stty
。我鼓励您阅读“POSIX 终端”。
关于c - linux终端中的回车键是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43070524/