A idéia básica é ler () um caractere de sua entrada; veja link como exemplo (que descobri por meio de um resultado de pesquisa no Google do link ):
int readch(void)
{
unsigned char c;
errno = 0;
if (read(fileno(stderr), &c, 1) <= 0) {
if (errno != EINTR)
end_it(0);
else
c = otty.c_cc[VKILL];
}
return (c);
}