В unix / posix стандартный способ сделать это - перевести ввод в неканонический режим с помощью команды tcsetattr:
#include <termios.h>
#include <unistd.h>
:
struct termios attr;
tcgetattr(0, &attr);
attr.c_lflag &= ~ICANON;
tcsetattr(0, TCSANOW, &attr);
См. Справочную страницу termios (3) для более подробной информации (и, возможно, больше информации, чем вы хотели знать).