c - linux终端中的回车键是什么意思?

标签 c linux terminal

我在下面有一个非常简单的 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/

相关文章:

c - 为什么 C 语言中的 free() 不起作用?

python - 后端在系统启动时关闭

python - 将远程原始代码转换为树莓派的十六进制代码

c++ - 如何将 linux 命令的输出复制到 C++ 变量

Linux 终端 : Finding number of lines longer than x

linux - 如何在使用 grep 时列出文件路径?

git - 我可以使用 Cron 在 macOS 上安排每日提交吗?

c - double 5.2在二进制文件中是如何表示的?

c - microC嵌入式系统中的一些错误

c++ - 填充传递给函数的二维数组