Chaque canal porte un numéro unique, certains ont des noms prédéfinis. Celui rattaché par défaut au clavier, appelé
canal d’entrée standard, porte le numéro 0 (si tant est que 0 soit un nombre) et s’appelle STDIN. Celui qui fait
transiter les informations à afficher vers l’écran (ou plutôt le pilote ou soussystème d’affichage), appelé canal de
sortie standard porte le numéro 1 et s’appelle STDOUT. Il en existe un troisième appelé STDERR et portant le numéro
2, chargé de véhiculer les messages d’erreur.
La notion de canal est flagrante avec certains systèmes d’exploitation, surtout Unix qui en use et en abuse. Windows
hérite luimême de cette notion, exploitable simplement au travers de l’interpréteur de commandes d’origine DOS. En
C, il est possible d’utiliser les fonctions de lecture et d’écriture de fichiers avec ces trois canaux.
Vous disposez de tous les canaux audelà du numéro deux, donc 3 et suivants pour vos propres fichiers. L’ouverture
d’un fichier consiste donc, directement ou indirectement, à rattacher un canal à un fichier. Les données que vous
écrirez dans le fichier iront de votre programme vers le fichier par ce canal, et celles que vous lirez du fichier au
programme toujours par ce canal.
Les notations algorithmiques peuvent varier sur ce point. Certaines notations reprennent la syntaxe d’un langage de
type Basic ou Visual Basic, dans lequel vous devez indiquer vousmême quel numéro de canal utiliser à l’ouverture du
fichier. D’autres reprennent une syntaxe issue du C où c’est la fonction C ouvrant le fichier qui choisit un canal, et
vous récupérez un identifiant de fichier sous forme de variable. Cet identifiant est le nom logique du fichier au sein du
programme. C’est cette notation qui est généralement préférable en algorithmique.
En C, une fonction d’ouverture de fichier retourne une variable de type FILE qui est en fait un type structuré
contenant diverses informations dont un entier contenant un numéro qui se révèle être le numéro du
descripteur de fichiers au niveau du système d’exploitation. Des limites sont définies au sein du système. Sous
Linux, il ne peut y avoir par défaut plus de 1024*1024 fichiers ouverts, mais en pratique 1024 par processus
(programme). Ca devrait suffire, cependant divers mécanismes permettent d’aller encore plus loin, généralement
jusqu’à 8192. Audelà, ça devient très très lourd. Un nom logique de fichier est donc un enregistrement de type
structuré.
c. Les modes d’ouverture
En ouvrant un fichier, il faut indiquer comment vous souhaitez y accéder. Souhaitezvous seulement lire son contenu,
y écrire où vous voulez, ou rajouter des lignes à la fin ?
q Enlecture, vous avez un accès en lecture seule au fichier. Vous ne pouvez pas y écrire. Vous pouvez vous y
déplacer, retourner au début, lire tout ce que vous voulez, mais c’est tout.
q Enécriture, parfois nommé lecture/écriture, vous pouvez modifier n’importe quelle partie du fichier, écrire où
vous voulez, écraser vos anciennes données qui seront donc définitivement perdues (vive les sauvegardes).
Attention à la casse si vos enregistrements sont de taille variable dans un fichier texte ! Vous pouvez aussi
lire le contenu du fichier.
q Enajout (append), vous ne pouvez pas lire le fichier, mais uniquement rajouter des données après la fin de
celuici, comme rajouter un enregistrement ou quelques octets tout au bout. Vous ne pouvez pas modifier les
données qui y sont déjà écrites.
Le problème principal que vous rencontrerez quand vous utiliserez des enregistrements dans un fichier, c’est
qu’il n’y a aucun moyen d’effacer un enregistrement, donc de réduire la taille de celuici. Vous devrez donc
ruser, utiliser un indicateur particulier pour indiquer un enregistrement supprimé, et prévoir des traitements de
réorganisation des fichiers (réindexation, suppression des lignes, listes chaînées, etc) en passant probablement
par des fichiers temporaires, ou tout charger en mémoire, puis réécrire seulement les bonnes valeurs…
- 4 -
© ENI Editions - All rigths reserved - Jonifar lina
154
canal d’entrée standard, porte le numéro 0 (si tant est que 0 soit un nombre) et s’appelle STDIN. Celui qui fait
transiter les informations à afficher vers l’écran (ou plutôt le pilote ou soussystème d’affichage), appelé canal de
sortie standard porte le numéro 1 et s’appelle STDOUT. Il en existe un troisième appelé STDERR et portant le numéro
2, chargé de véhiculer les messages d’erreur.
La notion de canal est flagrante avec certains systèmes d’exploitation, surtout Unix qui en use et en abuse. Windows
hérite luimême de cette notion, exploitable simplement au travers de l’interpréteur de commandes d’origine DOS. En
C, il est possible d’utiliser les fonctions de lecture et d’écriture de fichiers avec ces trois canaux.
Vous disposez de tous les canaux audelà du numéro deux, donc 3 et suivants pour vos propres fichiers. L’ouverture
d’un fichier consiste donc, directement ou indirectement, à rattacher un canal à un fichier. Les données que vous
écrirez dans le fichier iront de votre programme vers le fichier par ce canal, et celles que vous lirez du fichier au
programme toujours par ce canal.
Les notations algorithmiques peuvent varier sur ce point. Certaines notations reprennent la syntaxe d’un langage de
type Basic ou Visual Basic, dans lequel vous devez indiquer vousmême quel numéro de canal utiliser à l’ouverture du
fichier. D’autres reprennent une syntaxe issue du C où c’est la fonction C ouvrant le fichier qui choisit un canal, et
vous récupérez un identifiant de fichier sous forme de variable. Cet identifiant est le nom logique du fichier au sein du
programme. C’est cette notation qui est généralement préférable en algorithmique.
En C, une fonction d’ouverture de fichier retourne une variable de type FILE qui est en fait un type structuré
contenant diverses informations dont un entier contenant un numéro qui se révèle être le numéro du
descripteur de fichiers au niveau du système d’exploitation. Des limites sont définies au sein du système. Sous
Linux, il ne peut y avoir par défaut plus de 1024*1024 fichiers ouverts, mais en pratique 1024 par processus
(programme). Ca devrait suffire, cependant divers mécanismes permettent d’aller encore plus loin, généralement
jusqu’à 8192. Audelà, ça devient très très lourd. Un nom logique de fichier est donc un enregistrement de type
structuré.
c. Les modes d’ouverture
En ouvrant un fichier, il faut indiquer comment vous souhaitez y accéder. Souhaitezvous seulement lire son contenu,
y écrire où vous voulez, ou rajouter des lignes à la fin ?
q Enlecture, vous avez un accès en lecture seule au fichier. Vous ne pouvez pas y écrire. Vous pouvez vous y
déplacer, retourner au début, lire tout ce que vous voulez, mais c’est tout.
q Enécriture, parfois nommé lecture/écriture, vous pouvez modifier n’importe quelle partie du fichier, écrire où
vous voulez, écraser vos anciennes données qui seront donc définitivement perdues (vive les sauvegardes).
Attention à la casse si vos enregistrements sont de taille variable dans un fichier texte ! Vous pouvez aussi
lire le contenu du fichier.
q Enajout (append), vous ne pouvez pas lire le fichier, mais uniquement rajouter des données après la fin de
celuici, comme rajouter un enregistrement ou quelques octets tout au bout. Vous ne pouvez pas modifier les
données qui y sont déjà écrites.
Le problème principal que vous rencontrerez quand vous utiliserez des enregistrements dans un fichier, c’est
qu’il n’y a aucun moyen d’effacer un enregistrement, donc de réduire la taille de celuici. Vous devrez donc
ruser, utiliser un indicateur particulier pour indiquer un enregistrement supprimé, et prévoir des traitements de
réorganisation des fichiers (réindexation, suppression des lignes, listes chaînées, etc) en passant probablement
par des fichiers temporaires, ou tout charger en mémoire, puis réécrire seulement les bonnes valeurs…
- 4 -
© ENI Editions - All rigths reserved - Jonifar lina
154
