DS Système informatique 2012
Deuxième semestre
Département Informatique
Prénom :
Nom :
N° de TP :
Répondre directement sur le sujet. Ne pas le dégrafer.
Epreuve de système-réseau
Durée de l'épreuve : deux heures (de 9h à 11h) le 14 juin 2012
Responsable de l'épreuve : Dominique Beauchamps
Documents : autorisés
Calculatrices : interdites
Question 1 (4 points)
0
1
2
terminal
Fichier fich fich1 P1
0
1
2
Fichier fich2
P2
Le schéma ci-dessus décrit l’état des tables système relativement à deux processus P1 et P2 exécutant respectivement les programmes binaires contenus dans les fichiers de noms com1 et com2. Le contenu exact de ces différents fichiers et les codes sources correspondants sont sans importance : la seule chose que l’on
sait est que les processus correspondants utilisent simplement leurs entrée-sorties standards. Les deux fichiers sont dans le répertoire de travail.
Les fichiers fich1 et fich2 sont également dans le répertoire de travail. Si fich1 n’existe pas, le programme doit générer une erreur. Si fich2 existe, les écritures doivent être ajoutées à la fin du fichier.
Donner le code d’un programme C dont la demande d’exécution donne, d’une part, naissance à deux processus P1 et P2, le processus P2 étant descendant du processus P1 et, d’autre part, conduit à cette configuration pour les tables du système.
Question 2 (3 points)
Voici le texte du programme C nommé exo2.c :
#include
#include
#include
#include int mesgerr(char *msg, int nb){ fprintf(stderr,msg); exit(nb);
}
int main(int argc,char *argv[ ]){ pid_t idp; int pp[2],i,nb,entier; char buff[10]; char msg1[20]="Fin de père.\n"; if(argc!=2)mesgerr("Erreur d'arguments.\n",3); if(pipe(pp)==-1)mesgerr("Erreur de pipe.\n",2); if((idp=fork( ))==-1)mesgerr("Erreur de fork.\n",1); if(idp==0){ nb=read(pp[0],&entier,sizeof(int)); while(nb!=0){ sprintf(buff,"%d",entier+1); write(1,buff,strlen(buff)); write(1,"\n",1);