Exercice

1.
Si l'on possède un descripteur ouvert sur le fichier alors le système n'effectuera au plus que 4 accès disques (en supposant que l'inoeud est déjà chargé en mémoire). Ce cas se présente lorsque le caractère à lire est situé au dernier niveau d'indirection, donc : 1 accès pour le premier bloc d'indirection, 1 accès pour le suivant, 1 accès pour le suivant puis un dernier accès pour le bloc contenant l'octet recherché. L'idée à retenir ici étant que le nombre d'accès disque nécessaires pour retrouver un caractère dans un fichier est toujours borné.

Exercice

1.
Le fichier est la propriété de l'utilisateur de nom yunes et du groupe staff. On peut donc dire que:
  1. l'utilisateur yunes peut consulter son contenu et eventuellement l'exécuter (il est vide!)
  2. les membres du groupe staff (sauf yunes s'il en est membre) peuvent consulter et modifier son contenu
  3. les autres qui ne sont ni yunes ni membres du groupe staff peuvent tenter de l'exécuter (il est vide!)
2.
Il n'est pas possible de répondre à cette question de façon précise car le droit de supprimer une référence est lié au droit d'écriture sur le répertoire qui contient cette référence. D'autre part pour pouvoir détruire un fichier il faut pouvoir le nommer et donc posséder le droit d'utiliser son nom dans une référence. Sont donc autorisés à détruire ce fichier ceux qui possèdent à la fois le droit d'écriture et le droit d'exécution sur le répertoire contenant cette référence.

Exercice

1.
Cette commande sert à capturer l'entrée standard et à la reproduire à l'identique en sortie standard tout en la repliquant dans divers fichiers passés en paramètres. On peut imaginer l'utiliser afin de capturer au vol le résultat d'une exécution d'un programme. Par exemple :
tee entree_standard | programme_de_mon_choix | tee sortie_standard
2.
Voici une écriture possible :

Exercice

1.
Le fichier f devrait contenir abcdefghij123456kl. En effet il faut remarquer que le fichier est ouvert en mode a+ qui correspond à une ouverture en lecture/ajout. Donc toutes les écritures seront effectuées à la fin du fichier quoi qu'il se passe. Pour cela le descripteur fileno(f) a été ouvert en utilisant O_APPEND (entre autres). D'autre part le tampon de lecture/écriture est de taille 10 et utilise la politique de vidage _IOFBF (c'est à dire que le tampon est vidé lorsqu'il est plein). La première écriture fprintf() est réalisée à travers le tampon, donc lorsque les 10 premiers caractères remplissent le tampon celui-ci est vidé (écriture dans le fichier des caractères abcdefghij), ensuite les deux derniers caractères kl sont stockés dans le tampon. Alors l'écriture par write() est réalisée directement dans le fichier (en mode ajout donc à la suite des 10 premiers. Et pour terminer l'appel à fclose() vide le tampon en écrivant les deux caractères restant en fin de fichier.
2.
La politique de vidage du tampon est modifiée. _IONBF permet de ne plus utiliser le tampon. Donc le fichier f devrait contenir abcdefghijkl123456.
3.
L'effet visible sera la position de la chaine 123456 dans le fichier f.
4.
Les écritures étant en mode ajout l'effet de lseek() est nul en ce qui concerne les écritures.

Problème

Première partie

Deuxième partie

Troisième partie

Quatrième partie



Jean-Baptiste Yunes
2000-02-15