UNIX: Système de Gestion de Fichiers
Transcription
UNIX: Système de Gestion de Fichiers
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 d’E/S Système de gestion des fichiers Système de gestion des processus 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 / marc include local bin jean C. Crochepeyre Cnam mount /dev/hda2 /home 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 C. Crochepeyre Cnam NTFS UNIX: SGF BSD 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’inœ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 C. Crochepeyre Cnam super-bloc table des i-nœuds UNIX: SGF données 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 nom du répertoire 14 octets 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 etudiants ordinaire rwxr--r-x 23 nov 1999 14:25 22 nov 1999 12:54 23 nov 1999 14:15 5412 octets table d’adresses des blocs de données C. Crochepeyre Cnam UNIX: SGF • propriétaire • groupe • type du fichier • droits d’accès • date dernier accès • date fichier modifié • date i-nœud modifié • taille • adresses données 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 inœ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 l d 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 inœuds en mémoire C. Crochepeyre Cnam UNIX: SGF 40 descripteurs table des fichiers proc_1 Fic_A Fic_A R Fic_A R/W table des i-nœuds Fic_A proc_2 Fic_A C. Crochepeyre Cnam UNIX: SGF 41 • exemple: structures VFS T fichiers ouverts Processus 1 Objets fichier F3 Objet dentry Objet i-node 2 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 C. Crochepeyre Cnam UNIX: SGF blocs donné e s 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 27 103 18 46 pointeur 82 72 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 25 10 107 alors bloc 107 attribué : super bloc 14 C. Crochepeyre Cnam 21 105 52 UNIX: SGF --- 49 Récupération d’un bloc libre liste des blocs libres dans super bloc vide 11 super bloc 14 21 105 52 25 10 107 77 107 77 bloc n°11 bloc 11 attribué alors: liste des blocs libres dans super bloc super bloc C. Crochepeyre Cnam 14 21 105 52 UNIX: SGF 25 10 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 52 25 10 107 bloc 11 libre alors: super bloc C. Crochepeyre Cnam 14 21 105 UNIX: SGF 11 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 .. 1 . bloc 125 répertoire .. 9 1 1 4 bin 7 - 5 lib 3 etc 9 i-nœud 9 Infos 17 claude 57 luc 44 prog.exe infos 125 688 /usr /usr/prog.exe usr nom fichier i-nœud 44 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: C. Crochepeyre Cnam struct stat bufstat if (stat(“fic1.c”, &bufstat) ==-1) perror (“erreur stat”); 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 4 2 . i-nœud 17 nb lien = 2 i-nœud 42 C. Crochepeyre Cnam UNIX: SGF 17 .. 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 11 fichierBis 527 527 données 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 11 fichierBis 527 527 données 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 24 fichier_lien i-nœud n°24 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: C. Crochepeyre Cnam mv fic_src fic_dest 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 descripteurs du processus A 0 1 2 3 4 5 6 DUP() 1) on crée un tube: STDIN STDOUT STDERR tube input tube output - deux descripteurs: 3 et 4 qui pointent sur la table des fichiers: ici tube 2) on ferme le descripteur 1 - l’entrée 1 est libre 3) on duplique le descripteur 4 avec retour = dup (4) - 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