La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Gestion des entrées/sorties: organisation d'un disque dur

Présentations similaires


Présentation au sujet: "Gestion des entrées/sorties: organisation d'un disque dur"— Transcription de la présentation:

1 Gestion des entrées/sorties: organisation d'un disque dur

2 Gestion des entrées/sorties: organisation d'un i-node (fichier) sur un disque
Quelques types de systèmes de fichiers: FAT, VFAT (ancien windows et clés USB) NTFS windows actuel Ext, Ext2, Ext3 : linux UBIFS: linux embarqué ISO9600: CD-ROM NFS, SMB: système de fichiers partagés (réseaux)

3 Gestion des entrées/sorties: gestion de fichier dans le noyau linux
(Appel system)

4 Gestion des entrées/sorties: organisation d'un file system linux
Remarque: La commande "cd" permet de naviguer dans les répertoires et la commande "ls" permet de lister le contenu d'un répertoire. Le répertoire "./" représente le répertoire courant et le répertoire "../" représente le répertoire père Exemple: cd /media/usb ls ./ ls ../ cd /home/toto ls docs cd docs/cours

5 Gestion des entrées/sorties: montage file system
Remarque: /dev/hda1 (Hard Disk 1: premier disque dur) représente le file system principale (root file system). Il contient l'arborescence principale. Sur cette arborescence vient se greffer d'autres file system tels que celui du CD ou une clé USB…les point où on vient greffer un autre file system s'appelle un point de montage Exemple: montage d'une clé USB Lorsqu'une clé USB est insérée sur un PC le driver "usb storage" la reconnais et crée un fichier représentant ce device dans le répertoire /dev (ex: /dev/sda1) Pour monter le système de fichier de la clé il faut: mkdir /media/usb mount -t vfat /dev/sda1 /media/usb

6 Gestion des entrées/sorties: montage automatique au démarrage
Remarque 1: Au démarrage il n'existe que le point de montage racine (/) puis le noyau linux monte le root file system qu'il lui est passé en paramètre par le bootloader. Puis le processus Init analyse le fichier /etc/fstab dans le root file system pour savoir où trouver les autres file system à monter. Dans l'exemple ci-contre chaque ligne représente une commande de montage exécutée par le processus Init. Remarque 2: En général il existe un explorateur de fichier sous linux (pareil que windows). En plus d'explorer les fichiers, son rôle consiste aussi a détecter l'insertion d'un device contenant un file system (clé USB, CD…) reconnaitre sont type et le monter automatiquement (ceci vous évite de taper la commande mount à chaque fois que vous insérer une clé USB avant de pouvoir l'utiliser

7 Posix, gestion des entrées/sorties: fonction mount()

8 Posix, gestion des entrées/sorties: Manipulation de répertoires
DIR* opendir(const char* chemin): ouverture d'un répertoire int closedir(DIR* repertoire): fermeture d'un répertoire struct dirent* readdir(DIR* repertoire): lecture d'une entrée d'un répertoire void seekdir(DIR* rep, long pos): positionnement dans un répertoire long telldir(DIR* rep): retourne la position courante dans le repertoire int chdir(const char *path): changement de répertoire int mkdir(const char *path, mode_t mode): création d'un répertoire int rmdir(const char *path): suppression d'un répertoire Question : Quelles entrées trouve t on à la position 0 et à la position 1 dans un répertoire ?

9 Posix, gestion des entrées/sorties: Les attributs d'un fichiers
Exemple: La fonction stat: set à récupérer les attributs d'un fichier int stat(const char *path, struct stat *buf); Champs de la structure stat: st_dev, st_ino: périphérique et numéro du fichier st_mode: type et droits d’accès st_nlink: nombre de liens st_uid, st_gid: propriétaire et son groupe st_size: taille du fichier (nombre de caractères) st_atime: date du dernier accès st_mtime: date de la dernière modification st_ctime: date du dernier changement d’attributs

10 Posix, gestion des entrées/sorties: Manipulation des fichiers
int open(const char *path, int oflag [, mode_t mode]): ouverture (possibilité de création) d'un fichier ssize_t read(int fd, void *buf, size_t n): lecture depuis un fichier préalablement ouvert ssize_t write(int fd, void *buf, size_t n): écriture dans un fichiers préalablement ouvert off_t lseek(int fd, off_t offset, int whence): positionnement dans un fichiers

11 LIBC, entrées/sorties Sur les systèmes de type UNIX, Les fonctions d'entrées/sorties de la bibliothèque standards de la LIBC sont implémentées à l'aide des primitives (fonctions) de l'API posix. Dans le cas de lecture/écriture d'un fichier, les fonctions de la LIBC (fread, fwrite) utilisent une bufferisation des données dans l'espace utilisateur afin de faire le minimum d'appel systèmes (read, write). Ceci à pour effet d'accélérer le traitement. Lorsqu'il faut effectuer des accès à des périphériques autres que le disque (ex: réseaux, ports…), il faut impérativement utiliser les appels posix et non ceux de la LIBC (standard)

12 LIBC, entrées/sorties: ouverture et fermeture d'un fichier
File *file = fopen("nom-de-fichier","mode"); Les différents modes d'accès sont: "r" ouverture d’un fichier texte en lecture "w" ouverture d’un fichier texte en écriture "a" ouverture d’un fichier texte en écriture `a la fin "rb" ouverture d’un fichier binaire en lecture "wb" ouverture d’un fichier binaire en écriture "ab" ouverture d’un fichier binaire en écriture à la fin "r+" ouverture d’un fichier texte en lecture/écriture "w+" ouverture d’un fichier texte en lecture/écriture "a+" ouverture d’un fichier texte en lecture/écriture à la fin "r+b" ouverture d’un fichier binaire en lecture/écriture "w+b" ouverture d’un fichier binaire en lecture/écriture "a+b" ouverture d’un fichier binaire en lecture/écriture `a la fin fermeture : fclose(file);

13 LIBC, entrées/sorties: Les entrées sorties texte
Ecriture formatée: int fprintf(File *file,"chaîne de contrôle",expression-1, ..., expression-n) Lecture formatée: int fscanf(File *file,"chaîne de contrôle",argument-1,...,argument-n) Lecture d'un caractère: int fgetc(FILE* file) Ecriture d'un caractère: int fputc(int caractere, FILE *flot)

14 LIBC, entrées/sorties: exemple, recopie d'un fichier texte

15 LIBC, entrées/sorties: Les entrées sorties binaires
Lecture : size t fread(void *pointeur, size_t taille, size_t nombre, FILE *file) Ecriture: size t fwrite(void *pointeur, size_t taille, size_t nombre, FILE *file)

16 LIBC, entrées/sorties: Exemple écriture binaire

17 LIBC, entrées/sorties: Exemple lecture binaire

18 LIBC, entrées/sorties: positionnement dans un fichier
int fseek(FILE *flot, long deplacement, int origine) Origine peut être l'une de ces constantes : SEEK SET (égale à 0) : d´ebut du fichier SEEK CUR (égale à 1) : position courante SEEK END (égale à 2) : fin du fichier La fonction long ftell(FILE *file) retourne la position courante

19 LIBC, entrées/sorties: Exemple positionnement dans un fichier

20 LIBC, entrées/sorties: Exemple positionnement dans un fichier (suite)
L’exécution de ce programme affiche à l’écran : position 200 position 160 i = 40 position 0 i = 0 position 24 i = 6 Question : Que manque t il dans le code de ce programme ?


Télécharger ppt "Gestion des entrées/sorties: organisation d'un disque dur"

Présentations similaires


Annonces Google