setvbuf无法使stdin无缓冲

Pav*_*ath 10 c buffer stdin getchar unbuffered

我的主要目的是在getchar获得角色后立即返回,而不是等待ENTER密钥.我试过这个

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将其与原型进行比较 setvbuf

setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
Run Code Online (Sandbox Code Playgroud)

它应该设置stdin为无缓冲模式.

但仍然getchar()在等待ENTER

我见过这样的相关帖子

在C中读取字符时打印

这表明制作stdin无缓冲的替代方法.但我很想知道为什么setvbuf方法不起作用

Jon*_*ler 20

终止驱动程序在返回之前不会返回任何内容,即使read()操作会接受已存在的操作.

要从终端获取逐个字符的输入,您必须将其从规范模式转换为原始模式或cbreak模式,这需要完全不同的操作.有关如何控制终端,请查看"通用终端接口"上的POSIX手册.或者考虑使用该curses库.

另请参阅:Canonical与非规范终端输入

  • 不,`setvbuf()`只是告诉程序中的标准I/O库使用无缓冲区; 它没有告诉终端司机什么. (6认同)