Examen de Systèmes I -- Licence -- Septembre 2004

Exercice

Soit le «bout» de programme suivant:
f=open("fichier",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);
write(f,"abcdefghijklmnopqrstuvwxyz",26);
close(f);
f=open("fichier",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);
read(f,&c,1); putchar(c);
unlink("fichier");
read(f,&c,1); putchar(c);
f2 = dup(f);
read(f,&c,1); putchar(c);
read(f2,&c,1); putchar(c);
close(f);
read(f2,&c,1); putchar(c);
f=open("fichier",O_CREAT|O_RDWR,S_IRUSR|S_IWUSR);
write(f,"1234567890",10);
read(f2,&c,1); putchar(c);
close(f); close(f2);
On supposera qu'avant l'exécution le fichier concerné n'existe pas et que les conditions de succès des opérations de création seront réunies à l'exécution.
  1. avec quels droits d'accès le fichier sera-t'il créé (1-ère ligne) ?
  2. quelle sera sa taille après l'exécution de la 2-ème ligne ?
  3. quelle sera sa taille après l'exécution de la 4-ème ligne ?
  4. quels seront les résultats affichés par l'exécution complète du programme ?
  5. dessiner/décrire les parties significatives des différentes tables du système (descripteurs, fichiers ouverts, in\oeuds) à chaque opération open, dup, close.

Exercice

Soit le fragment de programme suivant:
d = open("f",O_CREAT|O_RDWR,0);
On supposera que le fichier n'existe pas avant l'exécution de la fonction.
  1. sous quelles conditions l'appel peut-il être réalisé ?
  2. avec quels droits le fichier sera-il créé (s'il peut l'être) ?

Exercice

Historiquement la base de donnée d'identification des utilisateurs était intégralement contenue dans le fichier /etc/passwd, consultable par tout le monde. Il a été décidé d'en ``sortir'' les mots de passe pour d'évidentes raisons de sécurité et de les placer dans un fichier de nom /etc/shadow. Pourriez-vous indiquer les protections et propriétaires de ces deux fichiers ainsi que ceux afférents à la commande /bin/passwd ?

Exercice

char *alpha = "nopqrstuvwxyz";
f = open("fichier",O_RDWR|O_APPEND,S_IRWXU);
for (i=0; i<13; i++) {
  lseek(f,i,SEEK_SET); write(f,alpha+i,1);
  lseek(f,i,SEEK_SET); read(f,&c,1); putchar(c);
}
On supposera qu'avant l'exécution le fichier contient les données abcdefghijklm.
  1. quel sera le résultat de l'exécution (contenu du fichier et affichages) ?
  2. même question si le mode d'ouverture ne contient pas O_APPEND ?

Exercice

Écrire une petite application client/serveur permettant au client d'obtenir auprès du serveur des résultats de calculs. Par exemple, on pourra interroger un serveur pour obtenir le résultat de l'addition de deux nombres, ou le résultat de la division de deux nombres. On se limitera à ces deux opérations ``triviales''. Il est demandé:
  1. d'indiquer par quel moyen les informations seront échangées,
  2. de décrire les messages qui transiteront de l'un à l'autre,
  3. d'écrire le code d'un client,
  4. d'écrire le code du serveur.