Salutations !!

J'essaye de faire en sorte que les programmes qui fonctionnent essentiellement en mode console, pour des raisons pédagogiques et didactiques, au travers d'une librairie de fonctions (une boîte à outils) pour mes élèves,
n'affichent pas les caractères ^C et ^Z lorsque ceux-ci sont pressés...

Sur l'image http://paste.opensuse.org/92490341

...je suis parvenu à "détourner" le message SIGINT sans afficher ces bêtes caractères ^C, par contre concernant ^Z j'ai tout de même une "crasse" lorsque j'appuie sur la combinaison de touches :{

Voici la fonction qui devrait permettre de ne pas afficher les caractères assimilés à ce type de signaux...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
int toggleSignalsEcho(void)
{
	struct termios		terminal;
 
	if(tcgetattr(STDOUT_FILENO, &terminal)==-1) return -1;
 
	terminal.c_lflag ^= (ECHOCTL|~ISIG);                                     // éviter de voir ^C ou ^Z quand on appuye sur ces touches...
 
	tcsetattr(STDOUT_FILENO,TCSAFLUSH,&terminal);
	return 0;
}
Le programme de test contient ces instructions concernant le "détournement" des signaux

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
detournement.sa_handler=ArretPropre;
sigaction(SIGHUP,&detournement,NULL);				// kill -1
sigaction(SIGQUIT,&detournement,NULL);				// kill -3
sigaction(SIGTERM,&detournement,NULL);				// kill -15
sigaction(SIGSEGV,&detournement,NULL);				// kill -11 
 
protection.sa_handler=SIG_IGN;
sigaction(SIGINT,&protection,NULL);					// ignorer le CTRL-C
sigaction(SIGPIPE,&protection,NULL);					// kill -13 (là je suis pas certain de ce que je fais :{ )
 
// 25 jan 2018
sigaction(SIGTSTP,&protection,NULL);					// ignorer le CTRL-Z (mais il affiche une merde à l'écran quand même :{)
Je ne sais pas bien comment faire -- j'ai bien une manière de "masquer" le caractère appuyé, via une séquence ANSI qui efface le dernier caractère affiché en déplaçant le curseur vers la gauche, affichant un espace, puis de nouveau déplacer le curseur sur la gauche --
mais si dans la librairie standard C il existe un "flag" qui peut masquer un echo de séquence de contrôle (https://ftp.gnu.org/old-gnu/Manuals/.../libc_355.html) je me demande bien comment je n'arrive pas à masquer le '^Z' de manière propre ^^