Année
Programmation Système
universitaire
Tubes et signaux
2025/2026
Objectifs :
• Communication inter- processus par tubes et signaux
Exercice 1 : Tubes
On veut compter le nombre d’occurrences d’un caractère donné dans une chaîne de caractères
représentée par un tableau de caractères terminé par ’\0’ en utilisant trois processus qui se partagent le
parcours du tableau. Le tableau est une variable globale du programme. On peut fixer une taille
maximale pour ce tableau.
a. Ecrire une fonction int nbOccu(char val, int debut, int fin) qui compte le nombre
d’occurrences du caractère val dans la chaîne entre les indices début et fin.
b. Ecrire les instructions du main() qui servent à demander une chaîne l’utilisateur ainsi que le
caractère à rechercher dans la chaîne.
c. Terminer le main() de manière à créer deux fils et partager en trois le parcours du tableau.
Chaque processus (le père et les deux fils) cherche dans un tiers du tableau. Les fils renvoient
le résultat au père par un exit(). Le père récupère les résultats des deux fils, les ajoute au sien
et affiche le total.
d. Ecrire une deuxième version du programme principal de manière à faire communiquer les
processus par l’intermédiaire d’un tube. Les fils écrivent leur résultat dans le tube et le père lit
dans le tube les résultats avant de faire la somme et de l’afficher.
Exercice 2 : Signaux
a. Écrire un programme qui crée un fils. Le fils déroute les signaux SIGTERM et SIGKILL, puis
s’endort. Le père lui envoie successivement ces deux signaux.
b. On désire simuler un distributeur électronique de café. Écrire un programme qui crée un fils.
Le père jouera le rôle du serveur et le fils celui du client. Le serveur doit effectuer deux tâches
servirverre(1) et servirverre(2). Le client doit effectuer deux tâches demanderverre(1) et
demanderverre(2). On veut synchroniser la réalisation de ces tâches dans cette ordre:
demanderverre(1), servirverre(1), demanderverre(2), servirverre(2) en utilisant les signaux
SIGSTOP et SIGCONT.
1 TP5
c. Ecrire un programme permettant d’effectuer un ping-pong des signaux entre un processus et
son fils. Le signal SIGUSR1 est envoyé par le fils au père et SIGUSR2 est envoyé du père au
fils. Le premier signal est envoyé par le père.
Exercice 3 : Signaux
Ecrire un programme permettant de mettre en œuvre le processus de synchronisation suivant. En fait,
nous avons un processus P1 qui crée un processus P2 (fils de P1) qui à son tour crée un processus P3
(fils de P2 et petit-fils de P1). Lorsque le processus P3 est créé, il envoie un signal à son grand-père, le
processus P1, pour lui signaler sa création, puis se termine juste après. Quand son père, le processus
P2, prend connaissance de la terminaison de P3, il envoie un signal à P1, son père, pour signaler la
mort de son fils. Après P2 se termine lui aussi. Le processus P1 doit traiter les événements dans l’ordre
décrit ci-dessus. Autrement dit, il doit premièrement traiter la délivrance du signal de P3 en affichant
le message « Processus P3 créé », ensuite la délivrance du signal de P2 en affichant « Processus P3
terminé » et à la fin afficher « Processus P2 terminé » lorsqu’il prend connaissance de la mort de son
fils.
2 TP5