You are on page 1of 6

Rsum de Cours

Ltudiant doit complter ses informations par lutilisation de la fonction MAN.


Dfinition : Un fichier unix est une suite de bytes (octets) matrialise par des blocs disques, et une inode qui contient les proprits du fichier mais pas son nom. Le contenu est entirement dfini par le crateur La gestion des ressources ncessaires est a le seule responsabilit du systme. Il y a trois types de fichiers UNIX : les fichiers ordinaires : tableaux linaires doctets identifis par leur numro dindex ; les rpertoires : ces fichiers permettent de reprer un fichier par un nom plutt que par son numro dindex dans la table de noeud dindex ; le rpertoire est donc constitu dune table deux colonnes contenant dun ct le nom que lutilisateur donne au fichier, et de lautre, le numro dindex donn par le systme qui permet daccder ce fichier. Cette paire est appele un lien ; les fichiers spciaux, priphriques, tubes, sockets, . . . , que nous aborderons lanne prochaine. Lorsquun processus veut manipuler un fichier, il va utiliser plus simplement un entier appel descripteur de fichier. Lassociation de ce descripteur linode du fichier se fait lors de louverture du fichier. Le descripteur devient alors le nom local du fichier dans le processus. Chaque processus UNIX dispose de 20 descripteurs de fichier, numrots de 0 19. Par convention, les trois premiers sont toujours ouverts au dbut de la vie dun processus : le descripteur de fichier 0 est lentre standard (gnralement le clavier) ; le descripteur de fichier 1 est la sortie standard (gnralement lcran) ; le descripteur de fichier 2 est la sortie erreur standard (gnralement lcran) ; Les 17 autres sont disponibles pour les fichiers et les fichiers spciaux que le processus ouvre luimme.

Table dinodes Cette table est place au dbut de chaque rgion de disque contenant un systme de fichiers UNIX.

Chaque noeud dindex de cette table ou i-noeuds, ou encore inode correspond un fichier et contient des informations essentielles sur les fichiers inscrits sur le disque : le type du fichier ; le nombre de liens le propritaire et son groupe ; lensemble des droits daccs associs au fichier la taille en nombre doctets ; les dates du dernier accs, de la dernire modification, et du dernier changement dtat (quand le noeud dindex lui-mme a t modifi) des pointeurs vers les blocs du disque contenant les donnes du fichier.

Structure stat A chaque inode correspondant une structure stat dfinie comme suit, dans le fichier <sys/stat.h> : struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; uid_t st_uid; gid_t st_gid; off_t st_size; time_t st_atime; time_t st_mtime; time_t st_ctime; }; /* identificateur du priphrique */ /* numro du noeud dindex */ /* droits daccs du fichier */ /* nombre de liens effectus sur le fichier */ /* identificateur du propritaire */ /* identificateur du groupe du propritaire */ /* taille en octets du fichier */ /* date du dernier accs au fichier */ /* date de la dernire modification du fichier */ /* date du dernier changement du noeud dindex */

La structure stat peut tre obtenue par lintermdiaire de la fonction stat : #include <sys/types.h>

#include <sys/stat.h> int stat(const char *path, struct stat *buf); path : pointeur sur un nom de fichier buf : pointeur vers une structure stat qui va tre remplie par lappel de la fonction. NB La structure stat ne contient ni le nom du fichier, ni les donnes. Primitive creat() int creat(const char *path, mode_t perm) path = nom du fichier */ perm = droits daccs */ Valeur retourne : descripteur de fichier ou 1 en cas derreur. Cette primitive ralise la cration dun fichier, dont le nom est donn dans le paramtre path. Lentier perm dfinit les droits daccs. Si le fichier nexistait pas, il est ouvert en criture. Ce nest pas une erreur de crer un fichier qui existait dj. Exemple : if ((fd = creat("essai_creat",0660)) == -1) perror("Erreur creat()") ; La fonction open() #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); Valeur retourne : descripteur de fichier ou 1 en cas derreur. Cette primitive permet douvrir (ou de crer) le fichier de nom pathname. Lentier flags dtermine le mode douverture du fichier. Le paramtre optionnel mode nest utilis que lorsque open() ralise la cration du fichier. Dans ce cas, il indique pour celui-ci les droits daccs Flags open()

Le paramtre flags peut prendre une ou plusieurs des constantes symboliques (qui sont dans ce cas spares par des OU), dfinies dans le fichier dinclusion fcntl.h. O_RDONLY ouverture en lecture seule O_WRONLY ouverture en criture seule O_RDWR ouverture en lecture et criture O_APPEND ouverture en criture la fin du fichier O_CREAT cration du fichier sil nexiste pas (seul cas dutilisation de largument perm) O_TRUNC troncature la longueur zro, si le fichier existe O_EXCL provoque un chec si le fichier existe dj et si O_CREAT est positionn, Exemple : if ((fd = open("essai_open" , O_WRONLY | O_CREAT | O_TRUNC, 0660)) == -1) perror("Erreur open()") ; Remarque : linclusion du fichier <sys/types.h> est ncessaire, car des types utiliss dans <fcntl.h> y sont dfinis. Primitive write()

#include <unistd.h> ssize_t write(int fd, const void *buf, size_t nbytes) criture dans un fichier fd : descripteur de fichier buf : adresse du tampon nbytes : nombre doctets crire Valeur retourne : nombre doctets crits ou 1 en cas derreur. Cette primitive crit dans le fichier ouvert reprsent par fd les nbytes octets sur lesquels pointe buf. lcriture ne se fait pas directement dans le fichier, mais passe par un tampon du noyau. Attention, ce nest pas une erreur que dcrire moins doctets que souhaits.

Primitive read() #include <unistd.h> ssize_t read(int fd, void *buf, size_t nbytes) fd : descripteur de fichier buf : adresse du tampon nbytes : nombre doctets lire Valeur retourne : nombre doctets lus, 0 si la fin de fichier a t atteinte, ou 1 en cas derreur. La primitive lit les nbytes octets dans le fichier ouvert reprsent par fd, et les place dans le tampon sur lequel pointe buf.

Primitive close() #include <unistd.h> int close(int fd) /* fermeture de fichier */ fd est le descripteur de fichier Valeur retourne : 0 ou 1 en cas dchec. Cette primitive ne vide pas le tampon du noyau correspondant au processus, elle libre simplement le descripteur de fichier pour une ventuelle rutilisation. Les fonctions opendir() et closedir() #include <sys/types.h> #include <dirent.h> DIR *opendir(const char *name); La fonction opendir() ouvre le rpertoire name et retourne un pointeur vers la structure DIR qui joue le mme rle que FILE. La valeur NULL est renvoye si louverture nest pas possible. #include <sys/types.h> #include <dirent.h> int closedir(DIR *dir); La fonction closedir() ferme un rpertoire ouvert par opendir

La fonction readdir() #include <sys/types.h> #include <dirent.h> struct dirent *readdir(DIR *dir); La fonction readdir() retourne un pointeur vers une structure de type struct dirent reprsentant le prochain couple (nom de fichier, inode) dans le rpertoire. La structure dirent contient deux champs d_name : reprsente le nom du fichier d_ino : reprsente son numro dinode. Les donnes retournes par readdir() sont crases chaque appel. Quand la fin du rpertoire est atteinte, readdir() renvoie NULL.

You might also like