setvbuf用来无法做出标准输入缓冲setvbuf用来无法做出标准输入缓冲(setvbuf not

2019-05-13 14:47发布

我的主要目的是使getchar只要它得到一个字符,而不是等待ENTER键返回。 我想这

int main()
{
    setvbuf(stdin,NULL,_IONBF,0);
    getchar();

    return 0;
}

这与原型相比setvbuf

setvbuf ( FILE * stream, char * buffer, int mode, size_t size );

它应该设置stdin到无缓冲模式。

但仍然getchar()一直等待ENTER

我已经看到相关的帖子是这样

而用C读取字符打印

其暗示替代方法,使stdin缓冲。 但我很好奇地想知道,为什么setvbuf方法不起作用

Answer 1:

直到你打回,即使终端驱动程序不返回任何内容read()操作将接受什么样的已经存在。

从终端获得字符一个字符输入,你必须把它弄出来的典型模式为原料或CBREAK模式,而完全需要不同的操作。 看看在POSIX手册“通用终端接口”对如何控制终端。 或考虑使用curses库。

也参见: 典型VS非规范端子输入



Answer 2:

如果你是Linux或其他类Unix系统下尝试此,它是缓冲输入与仅通过一整行的终端。 您可以使用ncurses的规避这样的:

#include <ncurses.h>

int main()
{
    initscr();
    getch();
    endwin();

    return 0;
}

编译:

gcc -o main main.c -lncurses


文章来源: setvbuf not able to make stdin unbuffered