190 likes | 330 Views
Fichiers et Systèmes de fichiers. interface de programmation système. ouverture et fermeture : #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int fd = open("nom symbolique", options, mode); option = O_RDONLY, O_WRONLY ou O_RDWR O_CREAT, O_EXCL O_TRUNC, O_APPEND
E N D
Fichiers et Systèmes de fichiers Fichiers et systèmes de fichiers
interface de programmation système • ouverture et fermeture : #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int fd = open("nom symbolique", options, mode); option = O_RDONLY, O_WRONLY ou O_RDWR O_CREAT, O_EXCL O_TRUNC, O_APPEND mode = droit d'accès au fichier si création int close (fd); Fichiers et systèmes de fichiers
interface de programmation système • lecture et écriture : cr = read(fd, adresse, taille); cr = write(fd, adresse, taille); • fd = descripteur du fichier rendu par open • adresse = adresse de la zone mémoire où écrire les données • taille = nombre de caractères à lire • cr = nombre de caractères réellement lus par le système • positionnement du pointeur de fichier lseek(fd , offset, whence); SEEK_SET La tête est placée à offset octets depuis le début du fichier. SEEK_CUR La tête de lecture/écriture est avancée de offset octets. SEEK_END La tête est placée à la fin du fichier plus offset octets. • destruction d'un fichier unlink("nom symbolique"); • reduction de la taille d'un fichier ftruncate(fd, longueur); truncate("nom", longueur); Fichiers et systèmes de fichiers
interface de programmation LIBC • Interface bufferisée, permettant d'éviter des appels système à chaque opération #include <stdio.h> FILE * fopen("nom fichier", mode)ouvre un fichier fclose (FILE *) ferme le fichier fread/fwrite(void *ptr, size_t size, size_t nmemb, FILE * fd); lit/écrit dans le fichier int getc(FILE *)lit un caractère dans le tampon. int putc(char c, FILE *)écrit un caractère dans le tampon. int fscanf(char *,lit un ensemble de variables suivant un format. int fprintf(char *,écrit un ensemble de variables suivant un format. int fseek(FILE *, long, int)effectue un déplacement dans le fichier. fflush(FILE *)vide le tampon dans le système. Fichiers et systèmes de fichiers
aspects système • Le système gére les processus actifs par l'intermédiaire de structures de données • task_struct sous LINUX • U + PROC sur UNIX system V • l'ouverture d'un fichier correspond à l'allocation d'une structure FILE, qui sera reférencée par un pointeur stocké dans la structure U • cette structure FILE contient le pointeur de position • sur appel à fork, les structures U + PROC (task_struct) sont dupliquées, mais pas la structure FILE • les processus père et fils partagent les fichiers ouverts AVANT le fork(), • mais ils accèdent indépendement aux fichiers ouverts après. Fichiers et systèmes de fichiers
stockage permanent : les disques • 1 disque = 1 ensemble de blocs (secteurs) numérotés de 0 à n, et accessibles en lecture/écriture de façon indivisible : • 1 lecture ou écriture disque opère sur 1 à s secteurs entiers • la taille d'un secteur est typiquement 512 octets (1024 dans certains cas) Fichiers et systèmes de fichiers
les objets d'un système de fichiers • fichiers • contenant des données, des programmes, des librairies de fonctions… • répertoires • entité logique utilisée pour grouper des références vers des fichiers et/ou répertoires • les répertoires permettent d'organiser les fichiers sous forme arborescente • la racine de cet arbre est un répertoire désigné par le caractère / / R1 R2 F1 F2 F3 F4 R3 • cette structure est appelée système de fichiers Fichiers et systèmes de fichiers
Structure FAT • FAT = File Allocation Table • le disque est divisé en 2 zones : • la table d'allocation, en début de disque • la zone des blocs de données (clusters sous Windows) • La table d'allocation contient autant d'entrées qu'il y a de cluster • 1 répertoire = n bloc de données contenant des entrées structurées en : • le nom symbolique de l'objet (fichier ou répertoire) et son type, • les informations sur l'objet (taille en octets, dates, droits d'accès…) • le numéro du premier bloc de donnée (sur disque) de cet objet • pour accéder aux données d'un fichier : • le numéro du premier bloc se trouve dans le répertoire (ex : 100) • le numéro du bloc suivant se trouve dans l'entrée 100 de la FAT (ex : 110) • le numéro du bloc suivant se trouve dans l'entrée 110 de la FAT…. Fichiers et systèmes de fichiers
Structure INODE • Chaque objet d'un système de fichier UNIX correspond une structure de donnée "inode" stockée sur disque • un inode est repéré par un numéro unique (dans le système de fichier) • l'inode contient toutes les informations qui décrivent l'objet : • type de l'objet : Répertoire, Fichier, ... • propriétaire, groupe, • droits d'accès • dates de création et dernière modification • taille de l'objet en octet • nombre de liens sur l'objet • ... Fichiers et systèmes de fichiers
Structure inode Fichiers et systèmes de fichiers
Exemple : structures sysv LINUX /* SystemV/Coherent inode data on disk */ struct sysv_inode { u16 i_mode; u16 i_nlink; u16 i_uid; u16 i_gid; u32 i_size; u8 i_data[3*(10+1+1+1)]; u8 i_gen; u32 i_atime; /* time of last access */ u32 i_mtime; /* time of last modification */ u32 i_ctime; /* time of creation */ }; /* SystemV/Coherent directory entry on disk */ #define SYSV_NAMELEN 14 /* max size of name in struct sysv_dir_entry */ struct sysv_dir_entry { sysv_ino_t inode; char name[SYSV_NAMELEN]; /* up to 14 characters, the rest are zeroes */ }; Fichiers et systèmes de fichiers
lister les numéros d’inode alpha12.couveep$ ls -il total 5896 2090 -rwxr-xr-x 1 couveep frec 657 Jan 10 2000 Approve 2072 -rwxr--r-- 1 couveep frec 36 Jun 26 1996 colog 2073 -rwxr-xr-x 1 couveep frec 501 Feb 05 1997 escale 2074 -rw-r--r-- 1 couveep frec 2967138 Nov 21 1997 gsv22w32.exe 2071 -rwxr--r-- 1 couveep frec 85 Mar 05 1998 infoServer 2078 -rwxr-xr-x 1 couveep frec 95 Mar 17 1998 lanoffice 2077 -rwxr-xr-x 1 couveep frec 423 Feb 10 1998 wnc2checkb 2075 -rwxr-xr-x 1 couveep frec 646 Feb 10 1998 wnc2doc 2076 -rwxr-xr-x 1 couveep frec 1070 Feb 10 1998 wnc2waitb 2079 -rwxr-xr-x 1 couveep frec 9164 Mar 27 12:55 xd 2070 -rwxr--r-- 1 couveep frec 73 Apr 17 1997 xemacs Fichiers et systèmes de fichiers
Fichier de type répertoire alpha12.couveep$ xd . 00000000: 08152E00 00000000 00000000 00000000 ................ 00000010: 00022E2E 00000000 00000000 00000000 ................ 00000020: 08167865 6D616373 00000000 00000000 ..xemacs........ 00000030: 0817696E 666F5365 72766572 00000000 ..infoServer.... 00000040: 0818636F 6C6F6700 00000000 00000000 ..colog......... 00000050: 08196573 63616C65 00000000 00000000 ..escale........ 00000060: 081A6773 76323277 33322E65 78650000 ..gsv22w32.exe.. 00000070: 081B776E 6332646F 63000000 00000000 ..wnc2doc....... 00000080: 081C776E 63327761 69746200 00000000 ..wnc2waitb..... 00000090: 081D776E 63326368 65636B62 00000000 ..wnc2checkb.... 000000A0: 081E6C61 6E6F6666 69636500 00000000 ..lanoffice..... 000000B0: 081F7864 00000000 00000000 00000000 ..xd............ 000000C0: 082A4170 70726F76 65000000 00000000 .*Approve....... Fichiers et systèmes de fichiers
Lien sur un fichier alpha12.couveep$ ln xd hexadump alpha12.couveep$ ls -il total 5920 2090 -rwxr-xr-x 1 couveep frec 657 Jan 10 2000 Approve 2072 -rwxr--r-- 1 couveep frec 36 Jun 26 1996 colog 2073 -rwxr-xr-x 1 couveep frec 501 Feb 05 1997 escale 2074 -rw-r--r-- 1 couveep frec 2967138 Nov 21 1997 gsv22w32.exe 2079 -rwxr-xr-x 2 couveep frec 9164 Mar 27 12:55 hexadump 2071 -rwxr--r-- 1 couveep frec 85 Mar 05 1998 infoServer 2078 -rwxr-xr-x 1 couveep frec 95 Mar 17 1998 lanoffice 2077 -rwxr-xr-x 1 couveep frec 423 Feb 10 1998 wnc2checkb 2075 -rwxr-xr-x 1 couveep frec 646 Feb 10 1998 wnc2doc 2076 -rwxr-xr-x 1 couveep frec 1070 Feb 10 1998 wnc2waitb 2079 -rwxr-xr-x 2 couveep frec 9164 Mar 27 12:55 xd 2070 -rwxr--r-- 1 couveep frec 73 Apr 17 1997 xemacs Fichiers et systèmes de fichiers
Contenu du répertoire alpha12.couveep$ xd -c . 00000000: 08 15 2E 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000010: 00 02 2E 2E 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000020: 08 16 78 65 6D 61 63 73 00 00 00 00 00 00 00 00 ..xemacs........ 00000030: 08 17 69 6E 66 6F 53 65 72 76 65 72 00 00 00 00 ..infoServer.... 00000040: 08 18 63 6F 6C 6F 67 00 00 00 00 00 00 00 00 00 ..colog......... 00000050: 08 19 65 73 63 61 6C 65 00 00 00 00 00 00 00 00 ..escale........ 00000060: 08 1A 67 73 76 32 32 77 33 32 2E 65 78 65 00 00 ..gsv22w32.exe.. 00000070: 08 1B 77 6E 63 32 64 6F 63 00 00 00 00 00 00 00 ..wnc2doc....... 00000080: 08 1C 77 6E 63 32 77 61 69 74 62 00 00 00 00 00 ..wnc2waitb..... 00000090: 08 1D 77 6E 63 32 63 68 65 63 6B 62 00 00 00 00 ..wnc2checkb.... 000000A0: 08 1E 6C 61 6E 6F 66 66 69 63 65 00 00 00 00 00 ..lanoffice..... 000000B0: 08 1F 78 64 00 00 00 00 00 00 00 00 00 00 00 00 ..xd............ 000000C0: 08 2A 41 70 70 72 6F 76 65 00 00 00 00 00 00 00 .*Approve....... 000000D0: 08 1F 68 65 78 61 64 75 6D 70 00 00 00 00 00 00 ..hexadump...... Fichiers et systèmes de fichiers
Création d’un système de fichiers alpha12.couveep$ man mkfs mkfs Command Purpose Makes a file system. Syntax mkfs [ -b Boot ] [ -l Label ] [ -i i-Nodes ] [ -o Options ] [ -p Prototype ] [-s Size ] [ -v VolumeLabel ] [ -V VfsName ] Device Description The mkfs command makes a new file system on a specified device. The mkfs command initializes the volume label, file system label, and startup block. dev Device name -v vol Volume ID -s size File system size -b boot Program to be installed in the startup block -V vfs Definition of the virtual file system -b Boot Names the program to be installed in block 0 of the new file system. -i i-Nodes Specifies the initial number of i-nodes on the file system. -l Label Specifies the file system label for the new file system. -o Options Specifies a comma-separated list of virtual file system implementation-specific options. Fichiers et systèmes de fichiers
Sous Windows Fichiers et systèmes de fichiers
Le même sous UNIX... Fichiers et systèmes de fichiers
Le lien symbolique alpha12.couveep$ ln -s /tmp/toto tata alpha12.couveep$ ls -il total 5896 2090 -rwxr-xr-x 1 couveep frec 657 Jan 10 2000 Approve 2072 -rwxr--r-- 1 couveep frec 36 Jun 26 1996 colog 2073 -rwxr-xr-x 1 couveep frec 501 Feb 05 1997 escale 2074 -rw-r--r-- 1 couveep frec 2967138 Nov 21 1997 gsv22w32.exe 2071 -rwxr--r-- 1 couveep frec 85 Mar 05 1998 infoServer 2078 -rwxr-xr-x 1 couveep frec 95 Mar 17 1998 lanoffice 2091 lrwxrwxrwx 1 couveep frec 9 Mar 27 14:12 tata -> /tmp/toto 2077 -rwxr-xr-x 1 couveep frec 423 Feb 10 1998 wnc2checkb 2075 -rwxr-xr-x 1 couveep frec 646 Feb 10 1998 wnc2doc 2076 -rwxr-xr-x 1 couveep frec 1070 Feb 10 1998 wnc2waitb 2079 -rwxr-xr-x 1 couveep frec 9164 Mar 27 12:55 xd 2070 -rwxr--r-- 1 couveep frec 73 Apr 17 1997 xemacs alpha12.couveep$ ls -il /tmp/toto 62 -rw-r--r-- 1 couveep frec 5 Mar 27 14:12 /tmp/toto alpha12.couveep$ xd -b tata 00000000: 74 6F 74 6F 0A titi. Fichiers et systèmes de fichiers