Programmation Système - E/S bas niveau⚓︎
Manipuler des fichiers⚓︎
Le but est de savoir manipuler tous les fichiers quels que soient leur type.
Ainsi nous sauront aussi bien gérer un fichier ASCII ou un Pipe depuis notre code C !
Nous allons nous intéresser aux fonctions suivantes :
- open
: ouverture
- read
: lecture
- write
: écriture
- close
: fermeture
- lseek
: positionnement
Il faudra ajouter les includes suivants :
1 2 |
|
Descripteurs de fichiers⚓︎
Ils sont utilisés pour désigner le fichier dans les opérations: open
, read
, write
, close
...
C'est le nom local du fichier dans le processus.
On dispose de 20 descripteurs seulement pour chaque processus (0 .. 19) dont 3 descripteurs alloués automatiquement :
– 0 entrée standard
– 1 sortie standard
– 2 sortie erreur
De plus, un curseur (pointeur) dans le fichier est associé à chaque descripteur.
Ce curseur se deplace lors des léctures/écritures et peut être déplacé.
Cela permet d'aller lire ou écrire uniquement certains octets !
Primitives⚓︎
Open⚓︎
Permet d'ouvrir un fichier afin de la manipuler.
C'est la seule primitive qui utilisera la nom du fichier pour s'y référer, puis lui assignera un descripteur à utiliser dans les autres primitives.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Exemple⚓︎
1 2 3 4 5 |
|
Write⚓︎
Permet d'écrire des données dans un fichier, en s'y référant par son descripteur.
Chaque écriture déplace le curseur dans le fichier (vers le bas).
1 2 3 4 5 6 7 |
|
Exemple⚓︎
1 2 3 4 |
|
Read⚓︎
Permet de lire des données dans un fichier, en s'y référant par son descripteur.
Chaque lecture déplace le curseur dans le fichier (vers le bas).
Pour lire une donnée, il faut donc que le curseur se situe au début de celle-ci avant de lire !
1 2 3 4 5 6 7 |
|
Exemple⚓︎
1 2 3 4 |
|
Close⚓︎
Permet la fermeture du fichier et la libération de son descripteur.
1 2 3 4 5 |
|
Exemple⚓︎
1 |
|
Lseek⚓︎
Permet de déplacer manuellement le curseur dans un fichier.
On le deplacer d'un offset positif ou négatif (en octets), à partir de trois références :
- SEEK_SET
: Le début du fichier
- SEEK_END
: La fin du fichier
- SEEK_CUR
: La position courante du curseur
1 2 3 4 5 6 7 |
|
Exemple⚓︎
1 |
|