setvbuf not able to make stdin unbuffered

buffer, c, getchar, stdin, unbuffered

Solution

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

Problem

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 main() { setvbuf(stdin,NULL,_IONBF,0); getchar(); return 0; } ``` Comparing this with the prototype of `setvbuf` ``` setvbuf ( FILE * stream, char * buffer, int mode, size_t size ); ``` it should set `stdin` to unbuffered mode. But still `getchar()` keeps waiting for ENTER I've seen related posts like this Printing while reading characters in C which are suggesting alternate methods to make `stdin` unbuffered. But I am curious to know as to why `setvbuf` method does not work

Original source

Related problems