Вот небольшой пример того, как читать отдельные нажатия клавиш с клавиатуры терминала:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int main(void){
struct termios save,raw;
tcgetattr(0,&save);
cfmakeraw(&raw); tcsetattr(0,TCSANOW,&raw);
unsigned char ch;
do{
read(0,&ch,1);
if( ch<32 ) printf("read: Ctrl+%c (%i)\r\n",ch+'@',ch);
else printf("read: '%c' (%i)\r\n",ch,ch);
}while(ch!='q');
tcsetattr(0,TCSANOW,&save);
}
Лучше знать, как терминал отправляет нажатия клавиш, прежде чем начать использовать ncurses для обработки ввода-вывода терминала.