Excerice 1

  • Écrire un programme qui boucle tout en affichant ctrl-c lorsque le processus qui l’exécute reçoit le signal SIGINT.

  • Dans un second temps on fera en sorte que seul le premier signal SIGINT soit traité.

Essayez à la main, puis regardez le flag SA_RESETHAND

Exercice 2

Écrire une commande recevoir-signaux qui affiche son pid puis boucle tout en affichant en les numérotant (dénombrant) les signaux que son processus reçoit.

Tester cette commande en utilisant la commande unix kill.

Exercice 3

Écrire une commande emettre-signaux pid-cible k s1 s2 ... sn qui émet à destination du processus cible k fois la séquence de signaux donnée en paramètre.

Utiliser cette commande pour “bombarder” de signaux un processus exécutant la commande de l’exercice précédent.

Exercice 4

Il s’agit maintenant de faire dialoguer un père et son fils à l’aide de signaux. Pour cela on va écrire une commande signaux-pere-fils k s1 s2 ... sn où le fils va émettre vers son père k fois la séquence de signaux donnée en paramètre. On utilisera le signal KILL pour terminer le dialogue.

Afin de ne pas perdre de signaux on va mettre en œuvre le protocole suivant : le père devra envoyer au fils le signal USR1 pour acquitter chaque réception, de son coté le fils devra attendre l’acquittement du père pour poursuivre l’émission.

Exercice 5

Cet exercice a pour but de réaliser une communication utilisant le code morse (ou un quelconque code similaire) entre deux processus — un client et un serveur — au moyen de signaux. Un résumé du codage morse est disponible dans le fichier morse.txt. Pour information, il faut y ajouter les particularités suivantes:

  • les signes morses sont séparés par un blanc ;
  • les lettres sont séparées par trois blancs ;
  • les mots sont séparés par sept blancs.

Question 1

Écrivez un programme qui boucle infiniment et affiche :

  • . lorsqu’il reçoit un signal SIGUSR1 ;
  • - lorsqu’il reçoit un signal SIGUSR2 ;
  • ` ` lorsqu’il reçoit un signal SIGALRM.

Vous utiliserez la fonction sigaction pour gérer la mise en place des gestionnaires (handler) de signaux. Vous pourrez utiliser la commande kill pour envoyer des signaux au processus depuis un terminal.

Question 2

Rajoutez à la terminaison (SIGINT) le message "[over]" avant de terminer.

Question 3

Écrire le programme qui envoie un message …