Systèmes d’exploitation – Gestion des fichiers en Unix
Catalin Dima
1
Manipulation des fichiers en UNIX
La manipulation des fichiers par des fonctions de la bibliothèque standard
stdio.h peut s’avérer trop lente.
Ces fonctions standard sont basées sur des fonctions spécifiques au système
d’exploitation.
Qui sont censées à s’exécuter de manière optimale.
Et qui peuvent être appelées directement dans le programme.
Ces fonctions spécifiques sont basées sur la notion d’appel système – un des
canaux essentiels de communication entre le système d’exploitation et les
processus.
2
Manipulation de fichiers en UNIX
Chaque processus possède une table de fichiers ouverts.
0 = entrée std,1=sortie std, 2 = erreur.
Ces fichiers sont identifiés par leur descripteur =l’indice correspondant dans
la table des fichiers.
Le système d’exploitation possède une table de fichiers ouverts.
C’est dans cette table que le système garde l’offset correspondant à chaque
fichier.
Chaque opération d’entrée/sortie sur un fichier passera par le système
d’exploitation.
d’un processus
.
.
.
0
1
2
3
Table de fichiers ouverts par le SE
Table des
descripteurs
Se rappeler de la commande de concaténation : cat f1 f2 > f3 !
3
Opérations sur les fichiers UNIX
Appels système !
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int open(const char *nom_fich, int flags)
int open(const char *nom_fich, int flags, mode_t mode)
flags peut être O_RDONLY,O_WRONLY ou O_RDWR, en combinaison (ou bit
par bit !) avec O_CREAT | O_TRUNC | O_APPEND | O_SYNC et autres
mode = droits d’accès ou attributs = ou bit par bit des constantes comme
S_IRUSR, S_IRWXG, S_IXOTH etc.
int close(int fd)
ssize_t read(int fd, void *buf, size_t count)
ssize_t write(int fd, void *buf, size_t count)
Retour = nb. caractères lus/écrits effectivement.
4
Opérations (2)
off_t lseek(int fd, off_t offset, int whence)
ou whence peut être SEEK_SET , SEEK_CUR ou SEEK_END
int link(const char *anc_nom, const char *nv_nom);
int unlink(const char *nom)
int rename(const char *anc_nom, const char *nv_nom)
int truncat(const char *nom, size_t taille)
int ftruncat(int fd, size_t taille)
5
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !