Vous êtes sur la page 1sur 83

UNIX:

Système de Gestion de Fichiers

C. Crochepeyre Cnam UNIX: SGF 1


INTRODUCTION
• Système de Gestion de Fichiers

– Sous système Unix


– Les fichiers sont:
• des fichiers du système d’exploitation
– programmes
– bibliothèques
– données paramètres
• des fichiers « périphériques »
• des moyens de communication entre processus
• des fichiers de données

C. Crochepeyre Cnam UNIX: SGF 2


Interface appels système

Système de Système de
gestion des fichiers gestion des processus
système d’E/S

cache

caractères blocs
contrôleurs

Interface matériels
C. Crochepeyre Cnam UNIX: SGF 3
• Les périphériques

– Système de gestion des E/S


• couche entre le S.G.F et le matériel
– Primitives d’accès aux périphériques dans les pilotes
• pilotes périphériques type caractères
• pilotes périphériques type blocs
– Actions sur les contrôleurs
un contrôleur par type de périphérique (ou 1 seul)
– Caractéristique Unix:
• l’interface d’appel périphérique utilise le SGF
• un périphérique = un fichier type caractère ou bloc

C. Crochepeyre Cnam UNIX: SGF 4


• Disque sous Unix
– Périphérique vu comme un fichier de type bloc
• /dev/hdxn (ide) /dev/sdxn (scsi)
x = <a, …. > le lecteur a, b,….
n = n° n° de la partition
– Partitions du disque
• Partition primaire ou logique
– hda1, hda2, hda3 partitions primaires (maxi 4 si pas de
partition étendue)
– hda4 partition étendue ayant hda5, hda6…partitions logiques
• Utilisation des partitions
– une seule partition active : celle du SE
– 1 FS associé
– une partition pour le swap
– une partition dédiée si besoin (SGBD)
Remarques: lilo (LInux LOader) permet de booter plusieurs SE sur un PC

C. Crochepeyre Cnam UNIX: SGF 5


GÉNÉRALITÉS

• Les systèmes de fichiers / Unix


– une seule arborescence
– composé de un ou plusieurs systèmes de fichiers
– montage possible: système unique
– un système de fichiers accessible sur disque par:
• un n° périphérique logique
n° du système = n° de périphérique
• des adresses physiques calculées par le pilote
– FS Unix monté sur la racine /
• exécution /etc/rc avec fichier fstab (suite des FS à monter dans
l’ordre)
• vfs: virtual file system permet au noyau Linux de reconnaître le FS
– Plusieurs variantes de FS

C. Crochepeyre Cnam UNIX: SGF 6


• Quelques systèmes de fichiers sur linux

Non journalisés (pas de journal de récupération en cas de panne)


– Ext2fs
– FAT12. FAT16, FAT32 ,VFAT….
Journalisés
– ext3fs
– reiserfs
– XFS
– NTFS….
Et pour les réseaux
– NFS….

Certains de ces systèmes sont issus ou supportés sur d’autres systèmes d’exploitation

C. Crochepeyre Cnam UNIX: SGF 7


• L’arborescence FHS (File Hierarchy Standard).

boot bin dev etc home mnt proc root sbin tmp usr var

Point de montage
cdrom floppy include local

/ bin

marc jean mount /dev/hda2 /home

C. Crochepeyre Cnam UNIX: SGF 8


• VFS: système gestion de fichiers virtuel
– Cohabitation de plusieurs systèmes de gestion de fichiers
– Un seul système de fichiers virtuel
– VFS est une couche logicielle insérée dans le noyau au dessus
des FS.

Appels système

VFS

Ext2fs NTFS BSD

C. Crochepeyre Cnam UNIX: SGF 9


Modèle de fichier commun VFS: 4 objets
– Chaque objet pointe sur les fonctions associées à cet objet
• Objet super bloc: bloc de contrôle du FS monté
• Objet i-nœud: bloc de contrôle, associé à un nombre d’i-
nœuds, qui identifie les fichiers du FS
• Objet fichier: liaison entre le fichier ouvert et un processus
• Objet dentry ou nom de fichier : liaison entre l’entrée du
répertoire et le fichier

C. Crochepeyre Cnam UNIX: SGF 10


Les Fichiers

• Fichier
– ensemble de données: fichier de données
• répertoire (d)
• réguliers ou ordinaires : programmes, données.... (-)
• liens symboliques (l)
– Communication: fichiers d’échange
• tube nommé (p)
• socket (s)
– ressource périphérique: fichier matériel
• bloc (b)
• caractères (c)
• Identification : un nom

C. Crochepeyre Cnam UNIX: SGF 11


Organisation disque

– bloc
• unité d’échange: 1024... octets
– blocs du système
• boot: 1er bloc ou autres blocs sur disque
• super-bloc: état du système de fichiers
– n° premiers blocs libres
– liste des i-nœuds libres
• table des i-nœuds configurée à l’installation
• blocs des données
– i-nœud (i-node) est un descripteur conservant les informations du
fichier sur disque

bloc boot super-bloc table des i-nœuds données

C. Crochepeyre Cnam UNIX: SGF 12


Exemple: allocation des blocs Linux Ext2fs
• Partition en groupes de blocs
• Choix taille des blocs: 1024 à 4096
• Une partition est composée de :
– un bloc d’amorçage
– un ensemble de groupes de blocs
– avec les blocs de données

bloc
d’amorçage Bloc groupe 0 Bloc groupe 1 Bloc groupe n

• Taille maxi d’une partition 4TO (avec VFS)


• Objectif: localisation rapprochée des données pour chaque fichier

C. Crochepeyre Cnam UNIX: SGF 13


Chaque groupe de bloc Ext2 contient:
– une copie du super bloc du FS (1 bloc)
– une copie des descripteurs de groupe de blocs (n blocs)
– table d’occupation des blocs du groupe (bitmap) (1 bloc)
– table d’occupation des i-nœuds du groupe (bitmap) (1 bloc)
– table des i-nœuds du groupe (n blocs)
– blocs de données du fichier (n blocs)
exemple:
– Si une partition est de 4GO, un bloc est de 2KO
• Bitmap des blocs de données = 8(bits) * 2K = 16K bits car 1 bit/ bloc
• Nb de blocs dans un groupe : 16K blocs de données (16384 blocs)
• Nb d’octets de données dans un groupe : 2KO(1 bloc) * 16K = 32 MO
• Pour 4GO il faudra 4GO/32MO = 128 groupes de blocs

C. Crochepeyre Cnam UNIX: SGF 14


• Le super bloc - Gestion de l’espace disque

– la taille du FS. (nb de blocs)


– le nombre de blocs libres dans le FS
– une liste des blocs libres disponibles dans FS
– l’indice du 1er bloc libre dans la liste des blocs libres
– la taille de la table des i-nœuds
– le nombre d’i-nœuds libres dans le FS
– une liste d’i-nœuds libres dans le FS.
– l’indice du 1er i-nœud libre dans la liste des i-nœuds libres
– des champs verrous pour les listes des blocs et i-nœuds libres
– un drapeau indiquant si le super bloc a été modifié

C. Crochepeyre Cnam UNIX: SGF 15


Exemple : super bloc Linux Ext2

• identification du système de fichiers


• heure de la dernière opération de montage, de la dernière écriture
• taille du système de fichiers en blocs
• taille d’un bloc
• taille de la structure i_noeud
• nb de blocs et i-nœuds libres
• nb de blocs et i-nœuds par groupe
• n° du 1er bloc utilisable
• n° du 1er i_noeud non alloué
• heure dernier contrôle de cohérence et fréquence
• et des informations complémentaires

Le super bloc est dupliqué dans chaque groupe lors du contrôle de cohérence

C. Crochepeyre Cnam UNIX: SGF 16


descripteurs Linux Ext2
• Descripteurs groupe de blocs
– un descripteur / groupe de blocs
• les n° des blocs bitmap gérant
– la liste des blocs libres
– la liste des i-nœuds libres
• le nb de blocs libres , le nb d’i-nœuds libres
• le nb de répertoires dans le groupe
• n° du premier bloc de la table des i-nœuds

• Bitmap
– Vecteurs de bits pour gérer
• La liste des i-nœuds libres
• La liste des blocs libres
• 0/ libre 1/ occupé

Descripteurs dupliqués dans chaque groupe de blocs

C. Crochepeyre Cnam UNIX: SGF 17


• Arborescence

racine

dir_3

toto.c

• situer un fichier dans l’arborescence


• son nom
• son chemin d’accès: /dir_3/ toto.c
• fichiers système: idem mais avec protections renforcées

C. Crochepeyre Cnam UNIX: SGF 18


• Notion de fichier
– identification: nom du fichier
– localisation fichier par un algorithme (‘namei’)
• parcours des blocs de données type‘répertoire’
• recherche du nom du fichier dans le répertoire

dir_3 17 prog.c 26 toto.c 21 dir_b

nom du fichier
n° i-nœud

• i-nœud du fichier dans la table des i-nœuds


– pointeurs vers blocs de données

C. Crochepeyre Cnam UNIX: SGF 19


répertoire

– fichier de type ‘d’ référencé dans la table des i-nœuds


• pointe vers des blocs de données type ‘répertoire’
• bloc données répertoire = n * 16 octets
– n° i-nœud
– nom du fichier ou répertoire
– racine /: i-nœud n° 2

bloc de données type ‘répertoire’


17 prog.c 26 toto.c 21 dir_b

2 octets 14 octets nom du répertoire


n° i-nœud

C. Crochepeyre Cnam UNIX: SGF 20


Algorithmes

– L’algorithme ‘namei’ appelle d’autres algorithmes:


• ‘iget’ attribuer i-nœud en mémoire
• ‘iput’ libérer i-nœud en mémoire
• ‘bmap’ maj paramètres noyau pour accès fichier
– D’autres algorithmes:
• ‘alloc’ réservation espace fichier sur disque
• ‘free’ libération espace fichier
• ‘ialloc’ réservation i-nœud pour un fichier
• ‘ifree’ libération i-nœud d’un fichier

C. Crochepeyre Cnam UNIX: SGF 21


Exemple : répertoire Linux Ext2

– Un répertoire contient:
• n° i-nœud
• longueur de l’entrée du répertoire
• longueur du nom du fichier (max 255)
• type du fichier
• nom du fichier

C. Crochepeyre Cnam UNIX: SGF 22


LES I-NOEUDS

• Définition
– i-nœud (i-node) est un descripteur conservant les informations du
fichier sur disque
– i-nœud = nœud d’index
– structure de taille fixe (ex 64 octets/i-nœud)
– table des i-nœuds configurée à l’installation
n°1 blocs défectueux
n°2 racine pour le système de fichiers
– gestion des i-nœuds
• sur disque
• en mémoire

C. Crochepeyre Cnam UNIX: SGF 23


• i-nœud sur disque

– un fichier = un i-nœud -> bloc de données


– table des i-nœuds après le super-bloc
– un n° = n° entrée dans table des i-nœuds du disque
– i-nœud utilisé par le noyau

– contenu des informations dans un i-nœud (64 octets):


• nom propriétaire
• type du fichier
• permissions
• date dernier accès
• nombre de liens vers d’autres fichiers (répertoire)
• taille: nombre d’octets
• table des adresses des blocs de données

C. Crochepeyre Cnam UNIX: SGF 24


• Exemple

un i-nœud
dupont • propriétaire
etudiants • groupe
ordinaire • type du fichier
rwxr--r-x • droits d’accès
23 nov 1999 14:25 • date dernier accès
22 nov 1999 12:54 • date fichier modifié
23 nov 1999 14:15 • date i-nœud modifié
5412 octets • taille
table d’adresses des blocs de données • adresses données

C. Crochepeyre Cnam UNIX: SGF 25


Exemple: i-nœud Linux Ext2
– taille d’un i-nœud: 128 octets
– bloc de 1024 octets = 8 i-nœuds/bloc
– Contenu structure
• type fichier et droits
• identifications propriétaire et groupe
• heures du dernier accès,
• heure de la dernière maj de l’i-nœud, maj des données
• nb liens vers d’autres fichiers
• taille fichier
• nb blocs de données du fichier
• listes de contrôles d’accès: répertoire et fichier
• table des adresses des blocs de données, etc…
• et pointeurs sur les blocs de données

C. Crochepeyre Cnam UNIX: SGF 26


• i-nœud en mémoire
– Au montage du système de fichiers, des données du disque sont
transférées en mémoire, tampon et cache de tampon. Exemple:
super bloc dans tampon
– appel fichier => copie i-nœud en mémoire
– ajout d’informations pour accès physique aux données
• état i-nœud: bloqué ou non
• n° logique périphérique
• n° ligne dans table des i-nœuds en mémoire
• pointeurs: chaînage des i-nœuds en mémoire
• compteurs de fichiers ouverts

C. Crochepeyre Cnam UNIX: SGF 27


Exemple: données Linux Ext2 en mémoire
– Super bloc (tampon)
– Descripteurs de groupe (tampon)
– Bitmap de blocs (cache de tampon, nb limité)
– Bitmap d’i-nœuds (cache de tampon, nb limité)
– i-nœud (cache de tampon si utilisation)
– Bloc de données (cache de tampon si utilisation)

Ne sont pas en mémoire


– i-nœud libre
– bloc de données libre

C. Crochepeyre Cnam UNIX: SGF 28


Attribuer un i-nœud mémoire

– demande d’accès à un fichier:


• procédure ‘namei’
nom fichier -> n° i-nœud -> table des i-nœuds disque
– procédure d’attribution i-nœud mémoire
• iget ()
• deux cas:
– i-nœud n’est pas en mémoire
– i-nœud est en mémoire
• dans les i-nœuds (actif)
• dans la liste des i-nœuds libres (inactif)

C. Crochepeyre Cnam UNIX: SGF 29


i-nœud n’est pas en mémoire

– recherche adresse physique de l’entrée de l’i-nœud dans table des i-


nœuds disque

– copie i-nœud dans les i-nœuds en mémoire en récupérant une place


dans la liste des i-nœuds libres

C. Crochepeyre Cnam UNIX: SGF 30


i-nœud est en mémoire
• actif
– verrouillé alors attente
– non verrouillé compteur accès +1
• inactif dans le cache
– ré allocation i-nœud mémoire
– compteur accès +1

C. Crochepeyre Cnam UNIX: SGF 31


Libération d’un i-nœud mémoire

– libération i-nœud: accès libéré


– procédure libération i-nœud de la mémoire
• iput ()
• compteur = compteur -1
– si compteur = 0, utilisé par aucun processus
• copie i-nœud maj sur disque
• i-nœud mémoire placé dans la liste des i-nœuds
libres en mémoire
– remarque: si compteur de liens nul (plus aucune donnée dans le
fichier) alors suppression des blocs de données

C. Crochepeyre Cnam UNIX: SGF 32


• Création d’un i-nœud disque

– création d’un fichier


– paramètres:
• nom du fichier
• chemin d’accès jusqu’au répertoire
• type du fichier
– procédure d’allocation d’un i-nœud sur disque
• ialloc() recherche i-nœud libre
– scrute liste des i-nœuds libres dans super-bloc
• la liste est vide
• la liste n’est pas vide

C. Crochepeyre Cnam UNIX: SGF 33


• Cas liste vide :
– recherche de tous les i-nœuds libres de la table des i-nœuds (type = 0)
– maj de la liste des i-nœuds libres dans super bloc
– si aucun i-nœud libre alors ... plus de place
• Cas liste non vide:
– choix i-nœud ‘plus grand n° libre’
– accès à l’i-nœud disponible dans la table des i-nœuds
• Dans les deux cas:
– écrire les éléments dans l’i-nœud de la table des i-nœuds
– décompter le nombre d’i-nœuds libres dans super bloc
– libérer l’i-nœud dans la liste des i-nœuds libres du super bloc

C. Crochepeyre Cnam UNIX: SGF 34


liste des i-nœuds libres (super-bloc)
12 17 54 125 127 250 vide

table des i-nœuds

d
blocs de données
entrée 0
n°250
-

C. Crochepeyre Cnam UNIX: SGF 35


• Suppression d’un i-nœud disque

– suppression d’un fichier


– paramètres:
• nom du fichier
• chemin d’accès jusqu’au répertoire
– procédure de suppression d’un i-nœud sur disque
• ifree() suppression dans table des i-nœuds disque
– verrou super bloc doit être libéré
– scrute liste des i-nœuds libres dans super-bloc
• encore de la place dans la liste
• la liste est pleine

C. Crochepeyre Cnam UNIX: SGF 36


• Cas place dans la liste:
– ajout n° i-nœud libéré
– maj ‘plus grand n° libre’ dans super bloc
– maj compteur nombre i-nœuds libres
• Cas liste pleine:
– si n° i-nœud libéré < ‘plus grand n° libre’
• n° i-nœud libéré remplace ‘plus grand n° libre’
– sinon pas de maj liste
• Dans les deux cas:
– maj table des i-nœuds disque (type = 0)
– suppression des blocs de données

Cette gestion des i-nœuds, sur disque et en mémoire , (version SystemV)


diffère selon les FS.

C. Crochepeyre Cnam UNIX: SGF 37


L’INTERFACE D’ACCÈS
• Primitives d’accès à un fichier
– par une commande du shell ou script
– par une requête lors d’un appel dans un programme
– Appels système : mode noyau

• Deux types de données


– données mémoire:
• procédures système d’accès
• informations temporaires
– données disque:
• données attachées au fichier sur disque

C. Crochepeyre Cnam UNIX: SGF 38


• Descripteur
– infos fichier transférées en mémoire lors de l’ouverture du fichier
– un descripteur créé par fichier
– une table des descripteurs par processus
– interface entre le processus et le FS. pour les échanges

• Descripteurs particuliers
– entrée standard (clavier): n° 0
– sortie standard (écran): n°1
– sortie erreur (fichier erreurs): n°2

• Structure d’un descripteur:


– /usr/sys/include/sys/user.h

C. Crochepeyre Cnam UNIX: SGF 39


• Table des fichiers

– une table des fichiers pour tous les processus est gérée par le noyau
– créée à partir de la table des i-nœuds disque
– description des propriétés du fichier et éléments pour l’accès
– un appel fichier = une entrée dans la table
• avec opération demandée (r,w,r/w)
– structure d’une entrée dans /usr/sys/include/sys/file.h
– chaque élément de la table pointe l’i-nœud du fichier dans table des i-
nœuds en mémoire

C. Crochepeyre Cnam UNIX: SGF 40


descripteurs
table des fichiers table des i-nœuds
proc_1

Fic_A
Fic_A R
Fic_A

proc_2
Fic_A R/W
Fic_A

C. Crochepeyre Cnam UNIX: SGF 41


• exemple: structures VFS

T fichiers ouverts
Processus 1
Objets fichier

Objet i-node
F3 Objet dentry

T fichiers ouverts
Processus 2

F3

C. Crochepeyre Cnam UNIX: SGF 42


LES PERMISSIONS
• Contrôle des accès aux fichiers renforcé sous Unix:
– système multi utilisateurs
– fichiers système et fichiers utilisateurs sous le même système de
gestion des fichiers
• niveaux de protection:
– droits -> r: lecture w: écriture x: exécution
– pour le propriétaire du fichier
– pour le groupe d’usagers dans lequel se situe le propriétaire
– pour tous les autres utilisateurs
• décision des niveaux de protection:
– le propriétaire
– le su

C. Crochepeyre Cnam UNIX: SGF 43


ORGANISATION DES FICHIERS SUR DISQUE
• Organisation
– non contigüe, aléatoire
– Gestion dynamique de l’espace du disque
• Blocs
– de taille égale
– 2 types de blocs
• blocs de données
• blocs d’adresses: adresses vers des blocs de données ou vers des
blocs d’adresses
– table des i-nœuds sur disque utilise ces différents types de blocs

C. Crochepeyre Cnam UNIX: SGF 44


• Pour chaque i-nœud de la table des i-nœuds:
– 13 entrées: une table des adresses des blocs fichiers
• 10 @ directs: 10 n° de blocs de données (ou 12 pour Ext2)
• 3 @ indirectes:
– n° bloc indirect simple: n° du bloc ayant 256 n° de blocs de
données
– n° bloc indirect double: n° du bloc ayant 256 n° de blocs
d’adresses
– n° bloc indirect triple: n° du bloc ayant 256 n° de blocs
d’adresses de blocs d’adresses
• Si adresse sur 32 bits et bloc de 1024 octets
=> taille maxi / fichier 16 GO (en théorie)
• un bloc libre est à zéro

C. Crochepeyre Cnam UNIX: SGF 45


Ta ble de s a dre sse s
da ns un i-noe ud

ta ble blocs

1 0 n° de blocs

indire ction 1
indire ction 2

indire ction 3

blocs indire cts 1 blocs donné e s

C. Crochepeyre Cnam UNIX: SGF 46


• Attribution des blocs

• super bloc
– nb de blocs libres
– une liste
• de 50 n° de blocs libres (cache)
• un pointeur vers d’autres listes de blocs libres
• utilitaire mkfs: création S.F.
– chaînage des blocs libres
• algorithme alloc()
– allocation d’un bloc à un fichier à partir de la liste
• si liste pleine: n° bloc pris dans la liste
• si liste épuisée: liste suivante remplace liste super bloc

C. Crochepeyre Cnam UNIX: SGF 47


Exemple

liste des blocs libres dans super bloc


super bloc 14 21 105 52 25 10

pointeur

82 72 27 103 18 46 68 261
bloc 14

Le 1er n° pointe vers une autre liste de blocs libres

C. Crochepeyre Cnam UNIX: SGF 48


Récupération d’un bloc libre:

liste des blocs libres dans super bloc pleine


super bloc 14 21 105 52 25 10 107

alors bloc 107 attribué :

super bloc 14 21 105 52 25 10 ---

C. Crochepeyre Cnam UNIX: SGF 49


Récupération d’un bloc libre

liste des blocs libres dans super bloc vide

super bloc 11

14 21 105 52 25 10 107 77
bloc n°11

bloc 11 attribué alors:


liste des blocs libres dans super bloc
super bloc 14 21 105 52 25 10 107 77

C. Crochepeyre Cnam UNIX: SGF 50


• Libération des blocs

• super bloc
– recherche d’un bloc libre

• algorithme free()
– libération des blocs d’un fichier
– attachement à la liste des blocs libres du super bloc
• si liste non pleine: maj dans cette liste
• si liste pleine: liste pleine écrite dans ce bloc libéré et un
pointeur dans la liste sur ce nouveau bloc libre

C. Crochepeyre Cnam UNIX: SGF 51


liste des blocs libres dans super bloc pleine
super bloc 14 21 105 52 25 10 107 77

bloc 11 libre alors:

super bloc 11

14 21 105 52 25 10 107 77
bloc n°11

C. Crochepeyre Cnam UNIX: SGF 52


liste des blocs libres dans super bloc non pleine
super bloc 14 21 105 52 25 10 107

bloc 11 libre alors:

super bloc 14 21 105 52 25 10 107 11

C. Crochepeyre Cnam UNIX: SGF 53


• Répertoires

– Fichier de type ‘d’


– Accéder à un i-nœud d’un répertoire permet d’accéder aux blocs
de données du répertoire
– Blocs de données du répertoire
• n entrées dans un bloc
– Données au format:
• n° i-nœud du fichier
• nom de fichier

C. Crochepeyre Cnam UNIX: SGF 54


– Chemin d’accès

• Définir le chemin d’accès au fichier


• syntaxe:
– chaîne de caractères
– plusieurs éléments séparés par /
– chaque élément est un nom de répertoire
– dernier élément est le nom du fichier
– le premier / est le répertoire racine

/users/étudiants/informatique/gaston/fichier.exe

C. Crochepeyre Cnam UNIX: SGF 55


– répertoire particuliers
. nom du répertoire courant
..nom du répertoire parent
– un n° i-nœud associé à chacun des noms de fichier dont:
• le répertoire courant
• le répertoire parent

C. Crochepeyre Cnam UNIX: SGF 56


. .
bloc répertoire bloc 125 répertoire
1 .. ..
9
1 1

4 bin i-nœud 9 17 claude i-nœud 44


7 - 57 luc
5 lib Infos infos
44 prog.exe
3 etc
125 688
9 usr
nom fichier /usr /usr/prog.exe
n° i-nœud

C. Crochepeyre Cnam UNIX: SGF 57


– Conversion nom_fichier en i-nœud
• n° i-nœud et nom fichier dans bloc données du répertoire
• l’algorithme ‘namei’
– pour chaque niveau, convertit nom et n°
– vérifie les droits d’accès
– parcourt les niveaux jusqu’à trouver le nom du fichier

C. Crochepeyre Cnam UNIX: SGF 58


LES PRIMITIVES
• Structure commune des fichiers
– dans /usr/sys/include/sys/stat.h
struct stat
{ dev_t st_dev; identif disque logique
ino_t st_ino; n° fichier sur disque
mode_t st_mode; type du fichier et droits accès
nlink_t st_nlink; nb liens physiques
uid_t st_uid; propriétaire
gid_t st_gid; groupe
dev_t st_rde; identif disque logique (bloc/car)
off_t st_size; taille en octets
time_t st_atime; date dernier accès

C. Crochepeyre Cnam UNIX: SGF 59


int st_spare1;
time_t st_mtime; date dernière modif
int st_spare2;
time_t st_ctime; date dern modif i-noeud
int st_spare3;
uint_t st_blksize; taille d’un bloc dans un fichier
int st_blocks; blocs alloués pour le fichier
uint_t st_flags; flags utilisateur
uint_t st_gen; n° génération du fichier
};

C. Crochepeyre Cnam UNIX: SGF 60


• Informations fichier

– récupération dans une structure stat des informations du fichier


#include <sys/types.h>
#include <sys/stat.h>
int stat (const char *ef, struct stat *pt_stat)
int fstat (const int desc, struct stat *pt_stat)

ex: struct stat bufstat


if (stat(“fic1.c”, &bufstat) ==-1)
perror (“erreur stat”);

C. Crochepeyre Cnam UNIX: SGF 61


• Les liens

– Association: nom fichier <-> i-noeud


– Nombre de liens: nombre de fois qu’un i-nœud est référencé dans
les répertoires
– 2 types : lien physique et symbolique

i-nœud xxxxx

C. Crochepeyre Cnam UNIX: SGF 62


17 Fichier.doc 23 prog.exe vers un fichier de données

nb lien = 1

données
i-nœud 17

17 usr 23 prog.exe vers un fichier répertoire

nb lien = 2
17 . 10 ..
i-nœud 17

C. Crochepeyre Cnam UNIX: SGF 63


cas d’un fichier répertoire ayant un sous-répertoire

17 usr 23 prog.exe

nb lien = 3
17 . 10 .. 42 bin
i-nœud 17
nb lien = 2
4 . 17 ..
2
i-nœud 42

C. Crochepeyre Cnam UNIX: SGF 64


• Créer un lien physique (synonyme)

– deux entrées de répertoire pointent sur un même fichier de données


– un seul i-nœud
% ln fichier fichierBis
ou
#include <unistd.h>
link (const char *fichier, const char * fichierBis)
– i-nœud indique 2 liens: fichier et fichierBis
– un seul fichier de données pour plusieurs utilisateurs

C. Crochepeyre Cnam UNIX: SGF 65


répertoire

11 fichier
i-nœud n°11
infos 527
11 fichierBis données
527

nombre de liens = 2

C. Crochepeyre Cnam UNIX: SGF 66


– Supprimer un lien physique

unlink (const char *fichierBis)

répertoire

11 fichier
i-nœud n°11
infos 527
11 fichierBis données
527

Dans ce cas le fichier de données existe toujours


mais le compteur de lien = 1

C. Crochepeyre Cnam UNIX: SGF 67


répertoire

11 fichier
i-nœud n°11
infos 527
527 données

Dans ce cas le compteur de lien = 0


Le fichier de données est supprimé
Si fichier ouvert: attente fermeture
L’i-nœud devient i-nœud libre

C. Crochepeyre Cnam UNIX: SGF 68


– Cas des fichiers répertoires

• Même mécanisme
• Commandes: mkdir et rmdir
• Un fichier répertoire a au moins deux liens

2122 -rw-rw-rw- 1 durand groupa 2134 jun 21 09:21 fichier


2123 drw-rw-rw- 3 durand groupa 512 jun 21 09:21 usr

Deux liens ou plus si un ou plusieurs autres fichiers sous-répertoire

C. Crochepeyre Cnam UNIX: SGF 69


– Lien symbolique

• nouveau fichier de type lien: l


• i-nœud créé
• le lien permet un raccourci vers un autre fichier
% ln -s fichier lien_fichier
– le fichier lien_fichier apparaît lors de la commande ls
– le nombre de lien dans i-nœud est inchangé
• la suppression de ‘lien_fichier’ ne détruit pas ‘fichier’

2122 -rw-rw-rw- 1 durand groupa 2134 jun 21 09:21 fichier


2123 lrw-rw-rw- 1 durand groupa 512 jun 21 09:21 lien_fichier -
> fichier

C. Crochepeyre Cnam UNIX: SGF 70


11 fichier i-nœud n°11
- infos
527

nombre de liens = 1
527
données

i-nœud n°24
24 fichier_lien
l infos
527

nombre de liens = 1
C. Crochepeyre Cnam UNIX: SGF 71
• Copie

– copier un fichier
• copie physique
• nouvel i-nœud
• nouveau nom

% cp fichier1 fichier2

2122 -rw-rw-rw- 1 durand groupa 2134 jun 21 09:21 fichier1


2123 -rw-rw-rw- 1 durand groupa 512 jun 21 09:21 fichier2

fichier1 et fichier2 ont chacun un seul lien

C. Crochepeyre Cnam UNIX: SGF 72


• Renommer un fichier

– Changer de nom de fichier


• nouveau nom
• même i-nœud

#include <unistd.h>
int rename(const char *ref_src, const char *ref_dest)

Commande: mv fic_src fic_dest

C. Crochepeyre Cnam UNIX: SGF 73


• Les attributs d’un fichier

#include <unistd.h>
int access (char *ref, int acces)

Commande: ls -la

C. Crochepeyre Cnam UNIX: SGF 74


• Créer un i-nœud

#include <sys/stat.h>
int mknod(const char *ref, mode_t mode, dev_t ressource)

Dans le cas d’un fichier ordinaire:


- open() ou creat()
Dans le cas d’un tube nommé:
- mkfifo ()
Dans le cas d’un répertoire:
- commande mkdir

C. Crochepeyre Cnam UNIX: SGF 75


• Changer les droits d’accès
#include <sys/stat.h>
int chmod(const char *ref, mode_t mode)
Commande: chmod mode fichier

• Changer de groupe
Commande: chgrp nv_grp fichier

• Changer de propriétaire
#include <unistd.h>
int chown(const char *ref, uid_t id_util, gid_t id_grp)
Commande: chown nv_prop fichier

C. Crochepeyre Cnam UNIX: SGF 76


• Ouverture de fichier

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *ref, int mode_ouv, [mode_t mode] )
ou
int creat (const char *path, mode_t mode );

• Fermeture de fichier

#include <unistd.h>
int close( int desc )

C. Crochepeyre Cnam UNIX: SGF 77


• Lecture d’un fichier

#include <unistd.h>
ssize_t read( int desc, void *ptr_buf, size_t nb_octets )

• Ecriture de fichier

#include <unistd.h>
ssize_t write( int desc, void *ptr_buf, size_t nb_octets )

C. Crochepeyre Cnam UNIX: SGF 78


BIBLIOTHEQUE E/S
• Appels système: read(), write(), open(), close()
– accès par les descripteurs
– définition des zones de réception/émission
– nb d ’octets transmis
– pas de formatage des E/S, pas de conversion

• Appels fonctions en bibliothèque stdio.h


– gestion tampon utilisateur
– descripteurs transparents
– formatage des entrées/sorties
– réduction du temps UC /appel système
• pas de changement de contexte
• pas de changement de processus

C. Crochepeyre Cnam UNIX: SGF 79


• Principe du tampon
– en lecture:
• tampon se remplit par un read()
• les caractères sont récupérés dans ce tampon jusqu ’à
épuisement
– en écriture
• les caractères remplissent le tampon
• le tampon plein est vidé par un write()
– mémoire cache avant écriture disque
• Structure FILE dans stdio.h pour la gestion du tampon
– pointeurs du tampon du fichier
– n° du descripteur

C. Crochepeyre Cnam UNIX: SGF 80


• Bibliothèque stdio.h
– fopen()
– fread()
– fwrite()
– fclose()
– fprintf()
– fgetc()
– autres…

C. Crochepeyre Cnam UNIX: SGF 81


BIBLIOGRAPHIE
• Linux Programmation Système et réseau
– Joëlle DELACROIX – Ed. Dunod 2003

• Conception d’un système Unix


– M.J. BACH - Ed. Masson 1993

• La programmation sous Unix


– J.M. RIfflet - Ed. Ediscience 1993

• Système d’exploitation
– A. Tanenbaum - Ed Dunod 1999

• Programmation système en C sous Linux


– Christophe Blaess - Ed Eyrolles 2000

C. Crochepeyre Cnam UNIX: SGF 82


Uilisation de dup() pour rediriger la sortie standard

DUP()
descripteurs du processus A
1) on crée un tube:
0 STDIN
STDOUT - deux descripteurs: 3 et 4 qui pointent sur la table des
1 fichiers: ici tube
2 STDERR
2) on ferme le descripteur 1
3 tube input
- l’entrée 1 est libre
4 tube output
3) on duplique le descripteur 4 avec retour = dup (4)
5
6 - le descripteur 4 est recopié dans le descripteur 1 (dup
prend la pemière entrée libre)
- valeur de retour: le nouveau descripteur ici le 1
4) on ferme les descripteurs 3 et 4 qui ne servent plus
5) tout envoi vers le descripteur 1 concernera le tube

C. Crochepeyre Cnam UNIX: SGF 83