setvbuf not able to make stdin unbuffered

前端 未结 2 1669
無奈伤痛
無奈伤痛 2020-11-27 05:44

My main intention was to make getchar return as soon as it gets a character instead of waiting for the ENTER key. I tried this

int ma         


        
相关标签:
2条回答
  • 2020-11-27 06:37

    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
    
    0 讨论(0)
  • 2020-11-27 06:43

    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

    0 讨论(0)
提交回复
热议问题