繁体   English   中英

setvbuf无法使stdin无缓冲

[英]setvbuf not able to make stdin unbuffered

我的主要目的是让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方法不起作用

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

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

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

如果您在Linux或其他类Unix系统中尝试此操作,则它是缓冲输入并仅传递整行的终端。 您可以使用ncurses来规避这个:

#include <ncurses.h>

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

    return 0;
}

编译:

gcc -o main main.c -lncurses

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM