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...
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 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; }
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 --
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 :{)
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 ^^
Partager