setvbuf not able to make stdin unbuffered

走远了吗. 提交于 2019-11-26 16:33:31
Jonathan Leffler

The terminal driver doesn't return anything until you hit return, even if the read() operation would accept what's already there.

To get character-by-character input from a terminal, you have to get it out of canonical mode into raw or cbreak mode, and that requires different operations altogether. Take a look at the POSIX manual on 'General Terminal Interface' for how to control the terminal. Or consider using the curses library.

See also: Canonical vs non-canonical terminal input

In case you are trying this under Linux or another Unix-like system, it is the terminal that buffers the input and only passes an entire line. You can use ncurses to circumvent this:

#include <ncurses.h>

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

    return 0;
}

Compile with:

gcc -o main main.c -lncurses
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!