Introduction aux Systèmes et aux Réseaux Cours 4 : Fichiers D’après un cours de Julien Forget et Thomas Vantroys (Univ Lille1) Laure Gonnord http://laure.gonnord.org/pro/teaching/ [email protected] Master CCI - Université Lyon 1 - FST Plan 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 2 / 64 Plan Les fichiers Objectif : manipuler la notion de fichier : Le stockage de fichier, OS dépendant. Coder avec des fichiers, l’API C-ANSI. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 3 / 64 Système de fichier 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 4 / 64 Système de fichier Disque dur 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 5 / 64 Système de fichier Disque dur Structure d’un disque dur Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 6 / 64 Système de fichier Disque dur Structure d’un disque dur Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 7 / 64 Système de fichier Disque dur Accès Chaque plateau comporte deux faces ; Une tête de lecture/écriture par face. Toutes les têtes se déplacent simultanément ; Chaque face est divisée en : Secteurs : découpage longitudinal ; Pistes : découpage circulaire ; L’intersection secteur et piste est un Bloc ; L’empilement des pistes forme un Cylindre ; L’accès est simultané à des données d’un même cylindre. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 8 / 64 Système de fichier Disque dur Vue physique vs vue logique Vue physique : pour accéder à un bloc de 512 octets il faut connaître le cylindre, le plateau et le secteur : très fastidieux ! Vue logique : le système de gestion de fichiers fournit une vue logique du disque permettant de : Faire abstraction des propriétés physiques des dispositifs de stockage. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 9 / 64 Système de fichier Disque dur Système de gestion de fichier Le système de gestion de fichier a pour rôle de : Stocker les fichiers sur un disque (répartition dans les différents blocs) ; Structurer de manière hiérarchique l’ensemble des fichiers (répertoires) ; Permettre de créer, modifier ou supprimer un fichier ; Permettre de modifier la hiérarchie des fichiers. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 10 / 64 Système de fichier Fichiers 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 11 / 64 Système de fichier Fichiers Définition Definition Un fichier est un ensemble d’informations réunies sous un même nom et enregistrées sur un support de stockage à long terme. Ils permettent : Le stockage des informations calculées par un processus lorsqu’il se termine ; Le stockage des informations de grande taille ; L’accès de plusieurs processus à ces informations. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 12 / 64 Système de fichier Fichiers Hétérogénéité des informations Exemple d’informations à stocker : Fichier de données (vidéo, image, base de données, etc). Fichier texte : caractères organisés en lignes/pages. Fichier source : fichier texte constitué de routines et de fonctions reconnaissables par un compilateur. Fichier exécutable : séquence de segments de code que le chargeur peut amener en mémoire et exécuter. Fichier = une séquence de bits, octets, dont le sens est défini par une convention entre le créateur et l’utilisateur. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 13 / 64 Système de fichier Fichiers Nommage Un fichier est nommé pour notre commodité. Le nom est généralement une chaîne de caractères ; Le nom peut contenir une extension indiquant son type ; Certains OS font une différence entre majuscules et minuscules. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 14 / 64 Système de fichier Fichiers Attributs Les attributs varient selon les systèmes de gestion de fichiers. Type (si le système supporte différents types de fichiers) ; Emplacement : pointe sur le fichier ; Taille : taille courante du fichier (octets, mots ou blocs) ; Droits d’accès : qui peut lire, écrire, exécuter, etc ; Date et heure de création, dernière modification, dernière utilisation... Ces informations sont généralement rangées dans la structure de répertoire qui réside également sur le support. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 15 / 64 Système de fichier Fichiers Types de fichiers UNIX - : ordinaire (texte, binaire, exécutable, . . . ) d : répertoire (directory ) c : fichier périphérique (device) de type caractère b : fichier périphérique (device) de type bloc s : socket l : lien (link ) p : tube (pipe) nommé I Ne retenir que les deux premiers. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 16 / 64 Système de fichier Fichiers UNIX : liens Un fichier est en fait une place sur le disque dur, référencée par un numéro, l’inode (voir plus loin). lien dur (hard link ) autre nom pour un fichier un lien de ce type peut être détruit sans affecter les autres dès qu’un fichier n’a plus de liens, il est détruit Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 17 / 64 Système de fichier Fichiers UNIX : liens lien symbolique (soft link ) c’est un pointeur sur un fichier si l’original est détruit, le lien persiste mais ne fonctionne plus un lien sur un répertoire doit être un lien symbolique Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 18 / 64 Système de fichier Fichiers Opérations sur les fichiers Créer un fichier : Trouver de la place dans le système de fichiers ; Créer une entrée dans le répertoire le contenant ; L’entrée du répertoire mémorise le nom du fichier et son emplacement. Écrire dans un fichier : Rechercher le répertoire contenant le fichier ; Rechercher l’emplacement du fichier sur le disque (à partir des informations contenues dans le répertoire) ; Maintenir un pointeur d’écriture vers l’emplacement dans le fichier où l’écriture suivante aura lieu ; Actualiser le pointeur à chaque écriture. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 19 / 64 Système de fichier Fichiers Opérations sur les fichiers (2) Lire dans un fichier : Rechercher le fichier (retrouver le répertoire puis l’emplacement disque) Placer l’information à lire en mémoire ; Maintenir un pointeur de lecture vers l’emplacement où la lecture suivante doit avoir lieu ; Actualiser le pointeur à chaque lecture. Détruire un fichier : Rechercher le fichier ; Libérer tout l’espace disque occupé par ce fichier ; Supprimer l’entrée dans le répertoire. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 20 / 64 Système de fichier Fichiers Méthode d’accès Accès séquentiel Le plus simple Tout ajout d’information s’effectue à la fin du fichier et met à jour le pointeur de fin de fichier I Autres méthodes plus complexes : accès direct (notion de bloc), accès indexé (tables de clefs). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 21 / 64 Système de fichier Fichiers Allocation disque Allocation contiguë de l’espace disque Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 22 / 64 Système de fichier Fichiers Allocation disque Allocation chaînée I Algo pour ajouter un bloc ? I D’autres stratégies existent (allocation indexée). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 23 / 64 Système de fichier Répertoires 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 24 / 64 Système de fichier Répertoires Définition Definition Un répertoire est une liste de descriptions de fichiers. Objectif : Stockage de milliers de fichiers ; Organisation des données. Mise en œuvre : Un répertoire mémorise les noms, attributs et emplacements sur le disque des fichiers ; Un répertoire est le plus souvent lui-même un fichier ; Les répertoires peuvent en général contenir d’autres répertoires, formant ainsi une structure arborescente. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 25 / 64 Système de fichier Répertoires Structuration à un niveau Structure la plus simple. Tous les fichiers se trouvent dans le même répertoire Tous les fichiers doivent avoir des noms uniques Problème évident en cas de plusieurs usagers. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 26 / 64 Système de fichier Répertoires Structuration arborescente Généralisation permettant aux utilisateurs de créer leurs propres sous-répertoires et d’organiser leurs données ; Chaque fichier possède un chemin d’accès unique ; Un répertoire (ou sous-répertoire) contient un ensemble de fichiers ou de sous-répertoire ; Il existe des primitives spéciales de création et de destruction de répertoire (mkdir, rmdir, . . . ) La destruction passe généralement par le "vidage" préalable du répertoire. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 27 / 64 Système de fichier Répertoires Exemple d’arborescence - Rappel Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 28 / 64 Système de fichier Répertoires Chemin de fichiers et répertoires Chemin absolu d’un fichier ; Nom "complet" du fichier = chemin d’accès depuis la racine. Exemple, sous Unix : /rep2/fic1.c ou sous DOS : \rep2\fic1.c Répertoire de travail (répertoire courant) ; Répertoire sur lequel un utilisateur est positionné à un moment donné. Ce répertoire est nommé “.” Chemin relatif d’un fichier ; Référence d’un fichier à partir du répertoire de travail ; Répertoire personnel (sous Unix) ; Répertoire sur lequel est positionné un utilisateur suite à son authentification. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 29 / 64 Système de fichier Répertoires Chemins : exemple Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 30 / 64 Système de fichier Répertoires Chemins : exemple (2) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 31 / 64 Système de fichier Répertoires Chemins : exemple (3) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 32 / 64 Système de fichier Répertoires Chemins : exemple (4) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 33 / 64 Système de fichier Répertoires Opérations sur les répertoires Les opérations de base sur les répertoires sont : Rechercher un fichier : trouver l’emplacement d’un fichier appartenant à ce répertoire (appelé une entrée du répertoire) ; Créer un fichier : créer une nouvelle entrée dans le répertoire ; Détruire un fichier : éliminer une entrée dans le répertoire ; Renommer un fichier : changer le nom de l’entrée dans le répertoire. I cf cours “ligne de commande”. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 34 / 64 Système de fichier Répertoires Disques dans l’arborescence Sous Unix Pas de disque dans les chemins ; Un arbre unique de répertoires, de racine "/" ; Disques vus comme des fichiers spéciaux ; Contenu d’un fichier disque présenté sous forme d’arborescence dans un répertoire donné par la commande mount. l a u r e @ s o r l i n : ~ $ d f −k Filesystem 1K−b l o c k s Used A v a i l a b l e Use% Mounted on / dev / sda3 226322844 20330896 194488692 10% / none 4 0 4 0% / sys / f s / cgroup udev 4020328 4 4020324 1% / dev tmpfs 805976 916 805060 1% / run none 5120 0 5120 0% / run / l o c k none 4029864 484 4029380 1% / run / shm none 102400 36 102364 1% / run / user Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 35 / 64 Système de fichier Répertoires Disques dans l’arborescence Sous Windows Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 36 / 64 Système de fichier Répertoires UNIX : principaux répertoires / : la racine bin : commandes binaires utilisateurs essentielles boot : fichiers statiques du chargeur de lancement dev : fichiers de périphériques etc : configuration système de la machine home : répertoires personnels des usagers lib : bibliothèques partagées essentielles mnt : point de montage temporaire proc : fichiers virtuels d’information du noyau et des processus root : répertoire personnel de root sbin : binaires systèmes tmp : fichiers temporaires usr : deuxième section majeure du système var : contient des fichiers de données variables Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 37 / 64 Système de fichier Répertoires UNIX : principaux répertoires /bin : les principales commandes du système pour tous les utilisateurs Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 38 / 64 Système de fichier Répertoires UNIX : principaux répertoires /boot : contient tout pour le démarrage, sauf les fichiers de configuration /dev : contient tous les fichiers spéciaux, liens entre le logiciel et les périphériques. exemples : fd* : floppy disk sd* : SCSI disk tty* : terminaux hd* : hard disk mt* : magnetic disk Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 39 / 64 Système de fichier Répertoires Partitionnement des disques Niveau de structuration supplémentaire ; Une partition est une zone contiguë de secteurs ; Il y a une table des partitions en tête du disque ; Permet des systèmes de fichiers différents sur un même disque ; C’est parfois obligatoire : Disques de grande capacité ; Partitions pour la zone de va-et-vient avec la mémoire (swap) ; Différents systèmes d’exploitation. C’est parfois utile : Limiter l’espace alloué ; Partition en lecture seule. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 40 / 64 Système de fichier Répertoires Partitionnement des disques Exemple de partitionnement (Linux) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 41 / 64 Système de fichier Droits d’accès 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 42 / 64 Système de fichier Droits d’accès Un système de fichiers fournit un mécanisme de gestion des droits d’accès, qui permet : De connaître le propriétaire d’un fichier/répertoire De “sécuriser” l’accès aux fichiers (vie privée). I Voir le cours sur les droits pour l’utilisation sous Unix. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 43 / 64 Système de fichier Systèmes de fichier 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 44 / 64 Système de fichier Systèmes de fichier ext2fs (extended 2 File System) Exemple : Le système de fichier ext2/ext3, un des systèmes supportés par Linux. Autres : FAT16, FAT32, . . . Système utilisé par Linux Propriétés : Attributs de protection Noms de fichiers longs Distinction entre majuscules et minuscules Taille maximum de 4 To Structure basée sur les inodes Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 45 / 64 Système de fichier Systèmes de fichier Structure générale Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 46 / 64 Système de fichier Systèmes de fichier Structure d’un inode Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 47 / 64 Système de fichier Systèmes de fichier Taille maximum d’un fichier Si on considère des blocs de 1 Ko et qu’une adresse de bloc occupe 4 octets, chaque bloc d’indirection peut comporter 256 adresses Simple indirection : 256 blocs de 1 Ko soit un fichier de 256 Ko maximum Double indirection : 256 blocs de 256 adresses de blocs de 1 Ko = 64 Mo Triple indirection : 256 blocs pointant sur 256 adresses de 256 adresses de 1 Ko soit un fichier de 16 Go de taille maximum Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 48 / 64 Système de fichier Systèmes de fichier Répertoires Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 49 / 64 Système de fichier Systèmes de fichier Résumé de cette partie Un système d’exploitation (SE) fournit des mécanismes pour les fichiers (accès au disque, création, stockage) appelé Système de Fichiers. Le système de fichiers cache à l’utilisateur les accès physiques au disque dur (DD), au CDROM, à une clef USB. Le système de fichier ext2/ext3, utilisé pour les DD sous Linux, permet d’avoir accès à une arborescence de fichiers et de répertoires. La structure de base est l’inode, qui permet de stocker les informations nécessaires (taille, dates de modification, . . . ) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 50 / 64 Programmation C : manipulation de fichiers 1 Système de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 51 / 64 Programmation C : manipulation de fichiers Intro Objet : manipulation de fichiers en C : ouverture, écriture, fermeture. C-POSIX : pour les appels système. ANSI-C : peu de suppositions sur le système utilisé dessous. Code plus portable, du coup. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 52 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 53 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Descripteur de fichier Lors de l’ouverture/création d’un fichier : Réservation d’une entrée libre dans la table des fichiers (une entrée = une case de tableau) ; Copie de l’inode du fichier dans cette entrée ; Index de l’entrée = descripteur de fichier. Exemple, à la création d’un processus : Entrée standard : desc = 0 ; Sortie standard : desc = 1 ; Sortie d’erreur : desc = 2. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 54 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Ouverture/création d’un fichier # include <sys / t y p e s . h> # include <sys / s t a t . h> # include < f c n t l . h> i n t open ( const char ∗pathname , i n t f l a g s ) ; i n t open ( const char ∗pathname , i n t f l a g s , mode_t mode ) ; man 2 open ; Renvoie un descripteur correspondant au fichier pathname ; Le numéro de descripteur est le prochain numéro libre (lequel si premier fichier ouvert ?) Renvoie -1 si échec ; flags : mode d’ouverture (lecture, écriture, création, etc) ; mode : droits du fichier créé (si flag de création) ; Pointeur de lecture/écriture positionné sur 1er caractère ; Le pointeur avance à chaque lecture/écriture. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 55 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Lecture dans un fichier # i n c l u d e < u n i s t d . h> s s i z e _ t read ( i n t fd , void ∗ buf , s i z e _ t count ) ; Lit dans le fichier correspondant au descripteur fd ; Lit n caractère à partir de la position actuelle dans le fichier ; Les caractères lus sont rangés dans buf ; Retour : Nb caractères lus (6 n) ; 0 si fin de fichier atteinte (0 caractères lus) ; -1 si échec. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 56 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Écriture dans un fichier s s i z e _ t w r i t e ( i n t fd , const void ∗ buf , s i z e _ t count ) Écrit dans le fichier correspondant au descripteur fd ; Écrit les count premiers caractères de buf ; Retour : nombre de caractères écrits (-1 si échec). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 57 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Fermeture de fichier # i n c l u d e < u n i s t d . h> i nt close ( in t fd ) ; Ferme le fichier correspondant au descripteur ; NB : Les descripteurs sont automatiquement fermés par la fonction exit. Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 58 / 64 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Exemple : my_cp # include < s t d i o . h> # include < s t d l i b . h> # include < f c n t l . h> # define MAX 1024 i n t main ( i n t argc , char ∗argv [ ] ) { i n t f1 , f2 , n ; char b u f [MAX ] ; i f ( argc ! = 3 ) { f p r i n t f ( s t d e r r , " e r r e u r parametres \ n " ) ; e x i t ( 1 ) ; } i f ( ( f 1 =open ( argv [ 1 ] , O_RDONLY) ) == −1) { /∗ mode lecture ∗/ p e r r o r ( " o u v e r t u r e f i c h i e r source i m p o s s i b l e " ) ; e x i t ( 2 ) ; } i f ( ( f 2 =open ( argv [ 2 ] , O_WRONLY| O_CREAT | O_APPEND, S_IRWXU) ) ==−1) { / /700 perror ( " creation f i c h i e r d e s t i n a t a i r e impossible " ) ; e x i t (3) ; } while ( ( n = read ( f1 , buf , MAX) ) > 0 ) { w r i t e ( f2 , buf , n ) ; } exit (0) ; } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 59 / 64 Programmation C : manipulation de fichiers Librairie standard C (ANSI C) 1 Système de fichier Le disque dur Fichiers Répertoires Droits d’accès Systèmes de fichier 2 Programmation C : manipulation de fichiers Appels systèmes (C-POSIX) Librairie standard C (ANSI C) Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 60 / 64 Programmation C : manipulation de fichiers Librairie standard C (ANSI C) La librairie stdio.h Librairie C standard d’entrée/sortie (I/O) ; Indépendante de l’OS, donc permet un code C portable (Unix, Windows, etc.) ; Nombreuses fonctions, plus puissantes que les appels systèmes ; Sous Unix, fait appel aux primitives système open, read, write, etc (surcouche) ; Les I/O sont “bufferisées” : Copie des I/O dans un tampon ; Lecture/écriture du tampon dans le fichier. Noyau moins sollicité (I/O regroupées) ; Processus moins synchronisé avec le noyau (si noyau occupé). Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 61 / 64 Programmation C : manipulation de fichiers Librairie standard C (ANSI C) Ouverture de fichier # include < s t d i o . h> FILE ∗ fopen ( const char ∗ path , const char ∗mode ) ; FILE ∗ fdopen ( i n t fd , const char ∗mode ) ; Valeur de retour : pointeur sur une structure (FILE) contenant : Un descripteur de fichier ; Les opérations autorisées sur le fichier ; Un buffer d’entrée/sortie. mode, path : cf open ; fdopen : “ouverture” à partir d’un numéro de descripteur. Ne fait pas partie de la norme ANSI ! Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 62 / 64 Programmation C : manipulation de fichiers Librairie standard C (ANSI C) Quelques fonctions int fclose (FILE ∗fp) : fermer un fichier ; int fprintf (FILE ∗stream, const char ∗format, ...) : comme printf, mais dans un fichier ; int fscanf(FILE ∗stream, const char ∗format, ...) : comme scanf, mais dans un fichier ; int putc(int c, FILE ∗stream) : écrire un caractère dans un fichier ; int getc(FILE ∗stream) : lire un caractère depuis un fichier ; int fputs(const char ∗s, FILE ∗stream) : écrire une chaîne de caractère dans un fichier ; char ∗fgets(char ∗s, int size , FILE ∗stream) : lire une chaîne de caractère dans un fichier ; Et bien d’autres... Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 63 / 64 Programmation C : manipulation de fichiers Librairie standard C (ANSI C) Exemple # include < s t d i o . h> # include < s t d l i b . h> # define MAX 1024 i n t main ( i n t argc , char ∗argv [ ] ) { FILE∗ f1 , ∗ f 2 ; char b u f [MAX ] ; i f ( argc ! = 3 ) { f p r i n t f ( s t d e r r , " e r r e u r parametres \ n " ) ; e x i t ( 1 ) ; } i f ( ( f 1 =fopen ( argv [ 1 ] , " r " ) ) ==NULL ) { /∗ mode lecture ∗/ p e r r o r ( " o u v e r t u r e f i c h i e r source i m p o s s i b l e " ) ; e x i t ( 2 ) ; } i f ( ( f 2 =fopen ( argv [ 2 ] , "w" ) ) ==NULL ) { /∗ cr car inexistant ∗/ perror ( " creation f i c h i e r d e s t i n a t a i r e impossible " ) ; e x i t (3) ; } f p r i n t f ( f2 , " T h i s f i l e i s a copy o f %s \ n \ n " , argv [ 1 ] ) ; while ( ( f g e t s ( buf , MAX, f 1 ) ) ! =NULL ) { f p u t s ( buf , f 2 ) ; } exit (0) ; } Laure Gonnord (CCI/Univ Lyon1) SystCCI Cours 4 : fichiers 2013 64 / 64