École Supérieure de Technologie et d'Informatique 2ème année Licence Informatique
Programmation Système
TD N°1
Exercice 1:
Soit le programme suivant :
int main()
{
int i = 1 ;
while (fork() == 0 && i <= 3)
i++;
printf("%d %d %d\n",i, getpid(), getppid());
return 0;
}
1. Que fait le programme ?
2. Combien de processus sont crées ?
3. Donner l'arbre de parenté de ces processus.
Exercice 2:
Soit le programme suivant :
int main()
{
fork() ; printf("fork 1 \n") ;
fork() ; printf("fork 2 \n") ;
return(0) ;
}
1. Expliquer l’exécution de ce programme.
2. Préciser le nombre de processus générés
3. Combien d’occurrences de chaque type de message « fork i » sont affichés ? Quel est l’ordre
d’apparition des différents types de messages ?
4. Que se passe-t-il si le premier fork() est remplacé par execlp(«who», «who», NULL) ?
5. Que se passe-t-il si le deuxième fork() est remplacé par execlp(«pwd», «pwd», NULL) ?
Exercice 3:
Soit le programme suivant :
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i=1;
while (i<3)
{
if (fork())
{ printf("1: %d %d \n", getpid(), getppid());
break;
}
else
printf("2: %d %d \n", getpid(), getppid());
i++;
}
}
Expliquer l’exécution de ce programme.
Exercice 4:
En utilisant les pipes, donner un programme permettant de réaliser une communication
unidirectionnelle en anneau entre trois processus fils.
Exercice 5:
Créer deux processus qui traitent une même chaîne en mémoire partagée. Le premier processus
demande à l’utilisateur de donner une chaîne de caractères, puis il (le premier processus) la place en
mémoire partagée. Le deuxième processus prend cette chaîne de la mémoire partagée et l'affiche.
Exercice 6:
En utilisant les sockets, créer un client et un serveur qui communiquent entre eux :
• en mode connecté
• en mode déconnecté