В каноническом режиме драйверов терминалов (также называемых «готовым» режимом) управляющие символы обрабатываются перед передачей в программу. См. term ios для получения дополнительной информации.
Однако вы можете отключить интересующие вас контрольные символы. Например, вы можете отключить DEL, чтобы получить пробелы:
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int main()
{
struct termios old;
/* Get current settings. */
tcgetattr(STDIN_FILENO, &old);
struct termios new = old;
new.c_lflag = ICANON;
/* Disable DEL. */
new.c_cc[VERASE] = 0;
tcsetattr(STDIN_FILENO, TCSANOW, &new);
char str[10] = {0};
printf("\nEnter:");
fgets(str, 10, stdin);
if(str[0] == 127) {
printf("backspace is entered\n");
}
/* Restore old settings. */
tcsetattr(STDIN_FILENO, TCSANOW, &old);
}