UNIVERSITÉ BORDEAUX I U.F.R. Mathématiques et Informatique
2 juin 1998 J.Bétréma
Durée: 2 heures
Tous documents interdits.
Voici le code source d'un programme nommé machin ;
certaines lignes comportent une étiquette :
dans les questions qui suivent, l'expression
ligne i désigne la ligne d'étiquette /* i */.
#include <fcntl.h> main (int argc, char **argv) { int d, code; d = open ("trace", O_WRONLY | O_CREAT | O_APPEND, 0644); /* 1 */ if (d == -1) { perror ("open"); /* 2 */ exit (1); } if (d < 10) /* 3 */ switch (fork ()) { /* 4 */ case -1 : perror ("fork"); /* 5 */ exit (2); case 0 : argv[1][0]++; write (d, argv[1], 1); /* 6 */ execv (argv[0], argv); /* 7 */ perror ("execv"); /* 8 */ exit (3); default : wait (&code); /* 9 */ } else write (d, "\n", 1); exit (0); }
Ce programme est a priori obscur : il ne comporte pas de boucle, et le test de la ligne 3 est donc curieux. Voici un jeu d'essai (le fichier trace n'existe pas avant exécution de ces commandes) :
verlaine% machin beta verlaine% cat trace cdefghi verlaine%
La question centrale est la question 6; elle seule demande un assez long développement. Les questions précédentes sont des questions d'échauffement. A chaque question sont liées une ou plusieurs caractéristiques du système Unix qu'il faut exposer pour obtenir le maximum de points. Le barème est indicatif.
Note : on rappelle que le fichier trace n'existe pas lors du lancement de p0.
int execv (char *path, char *argv[]);
[...]
These routines provide various interfaces to the execve() system call. Refer to execve(2V) for a description of their properties; only brief descriptions are provided here.
exec() in all its forms overlays the calling process with the named file, then transfers to the entry point of the core image of the file. There can be no return from a successful exec(); the calling core image is lost.
The first argument is a pointer to the name of the file to be executed.
Expliquer la différence de nature entre une fonction comme execv et l'appel-système execve . Que signifie overlay ? traduire et expliquer le mécanisme. Que signifie core image ? Expliquer pourquoi the calling core image is lost.
PPID PID PGID COMMAND 1498 1499 1499 -bin/csh (csh) 1499 2123 2123 machin beta
Compléter cet extrait avec les lignes correspondant à p1 etc.
Même question si l'on supprime l'appel-système wait (ligne 9).