Esto es probablemente más complicado de lo que imagina. Para hacer esto, presumiblemente necesitará tomar el control del eco de los caracteres que el usuario está escribiendo, etc.
Eche un vistazo a la biblioteca de curses. La función wgetch debe ser lo que necesites, pero primero necesitarás inicializar maldiciones, etc. Lee las páginas man, si tienes suerte, encontrarás ncurses o curses-intro man pages. He aquí un fragmento:
To initialize the routines, the routine initscr or newterm must be
called before any of the other routines that deal with windows and
screens are used. The routine endwin must be called before exiting.
To get character-at-a-time input without echoing (most interactive,
screen oriented programs want this), the following sequence should be
used:
initscr(); cbreak(); noecho();
Most programs would additionally use the sequence:
nonl();
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
Si no tienes esa página de manual/para más información, busque las páginas del manual de funciones individuales.
+1. No me di cuenta de que es posible desactivar solo algunas teclas en el modo cocinado. – Dummy00001
Esto está incompleto. También necesita deshabilitar^U o el usuario puede borrar toda la línea pendiente. También^W. Puede haber más; comprobar. Un enfoque más seguro sería deshabilitar completamente el modo ICANON. –
R. - tienes razón. Las especificaciones OP no incluyen eso, IMO. Y tendrías que leer todo el struct termios desactivando las posibilidades ¿no? Como se mencionó en otra parte, una solución completa no es lo que publiqué. –