[英]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
我见过这样的相关帖子
这表明使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.