Previous Up Next

2  Entrées multiples : mulent

L’objet de la commande mulent est de lister les entrées sous le répertoire courant qui désignent un nœud du système de fichiers référencés par plusieurs entrées. On qualifie de multiples de telles entrées.

Un exemple est fourni par la session suivante :

% mkdir d 
% touch foo 
% touch bar 
% ln foo d/gee
% ln -s bar zuu
% ls -1aiR
.:
1222812 .
     23 ..
1222828 bar
1222826 d
1222827 foo
1222831 zuu

./d:
1222826 .
1222812 ..
1222827 gee

% mulent
1222827 2 foo
1222827 2 d/gee

La commande touch permet de créer un fichier. La commande ln permet de créer un lien physique, c’est-à-dire une nouvelle entrée pour un nœud préexistant du système de fichiers ; ce nœud correspondra donc à des entrées multiples. La commande ln -s permet de créer un lien symbolique vers une autre entrée du système de fichiers. Les options de ls utilisées permettent

La commande mulent affiche pour chacune des entrées le numéro d’inœud de l’entrée, le nombre de liens dans le système de fichiers vers cet inœud, le nom de l’entrée. Le nombre de liens correspond au champ st_nlink (de type nlink_t qui est un entier) de la structure struct stat.


Exercice 6
 (Prise en compte des répertoires)   On remarque que la commande mulent n’affiche pas les entrées qui correspondent à des répertoires et qui pourtant, au sens strict, sont des entrées multiples. Expliquez pourquoi les répertoires sont au sens strict des entrées multiples.

La spécification de mulent indique que lors du parcours d’une arborescence,

Une partition (ou disque logique, périphérique, device) est représentée par une valeur entière de type dev_t telle celle utilisée dans les structures struct stat.

En ce qui concerne notre implémentation, nous supposerons que la partition qui correspond au répertoire courant est identifiée par la valeur de la variable

static dev_t current_dev; 

Exercice 7
 (Partition unique)   Expliquez ce qui justifie de ne pas explorer les fichiers en dehors de la partition courante.

Exercice 8
 (Une entrée multiple)   Proposez une fonction
int mulent_file(const char *pathanme, int *nlink, int *inumber);
qui indique par une valeur de retour booléenne si l’entrée pathanme est multiple. Dans ce cas, la valeur qui est à l’adresse nlink est renseignée par le nombre de liens associés à l’entrée, et la valeur qui est à l’adresse inumber est renseignée par le numéro d’inœud correspondant à cette entrée.

Exercice 9
 (À la recherche des entrées multiples)   Proposez une fonction
void mulent(const char *pathname);
qui Un appel à mulent(".") forme, en sus d’une initialisation de current_dev, le gros de la fonction pincipale la commande mulent.

Previous Up Next