即使关闭缓冲,getchar也不会返回

时间:2015-01-07 01:59:34

标签: c buffer

我在Linux 3.12,GCC 4.8的控制台中编译并运行这个简单的程序:

#include <stdio.h>
main() {
        setvbuf(stdin, NULL, _IONBF, 0);
        printf("%c\n", getchar());
}

运行程序并按任意字母,程序不会退出,除非我按下回车键。

什么阻止getchar()运作?某处有隐藏的缓冲区吗?

2 个答案:

答案 0 :(得分:2)

问题是您的终端正在缓冲输入。在您的终端发送通过其收到的输入之前,您的程序无法看到它 - 并且默认情况下,它不会通过它直到它看到换行符。

如果您在Linux上运行bash,则运行stty -icanon应更改终端设置以直接传递所有输入,而无需换行。

答案 1 :(得分:0)

终端正在执行缓冲。终端实际上​​不会将该行写入前台程序的标准输入,直到您按Enter键。

要查看该计划是否符合您的期望,您只需运行echo 'a' | ./myprog即可。它将立即退出并打印单个字符。