Section courante

A propos

Section administrative du site

Entrées/sorties sans tampon

Les fonctions d'entrées/sorties sans tampon sont utilisées pour accéder aux fichiers et aux périphériques. Ils sont compatibles avec leurs homologues UNIX. Comme leur nom l'implique, un programme utilisant ces fonctions, à deux exceptions près, communique directement avec les fichiers et les périphériques; les données ne passent pas par les tampons système. Cependant, certaines entrées/sorties non tamponnées sont mises en mémoire tampon : lorsque des données sont transférées vers ou à partir d'un fichier dans des blocs inférieurs à une certaine valeur, elles sont temporairement mises en mémoire tampon. Cette valeur diffère d'un système à l'autre, mais est toujours inférieure ou égale à 512 octets. En outre, l'entrée de la console peut être mise en mémoire tampon, et l'est, à moins que des actions spécifiques ne soient prises par le programme de l'utilisateur. Les programmes utilisant les fonctions d'entrées/sorties sans tampon pour accéder aux fichiers gèrent généralement eux-mêmes le blocage et le déblocage des données de fichier. Les programmes nécessitant un accès aux fichiers mais ne souhaitant pas effectuer le blocage et le déblocage peuvent utiliser les fonctions d'entrées/sorties standard. Voici les fonctions d'entrées/sorties sans tampon :

Nom Description
open Cette fonction prépare un fichier ou un périphérique pour les entrées/sorties sans tampon.
creat Cette fonction permet de créer un fichier et l'ouvrir.
close Cette fonction permet de conclure les entrées/sorties sur un fichier ou un périphérique ouvert.
read Cette fonction permet de lire des données à partir d'un fichier ou d'un périphérique ouvert.
write Cette fonction permet d'écrire des données dans un fichier ou un périphérique ouvert.
lseek Cette fonction permet de changer la position actuelle d'un fichier ouvert.
rename Cette fonction permet de renommer un fichier.
unlink Cette permet de supprimer un fichier.
ioctl Cette fonction permet de changer le mode d'entrée/sortie de la console.
isatty Un fichier ou un périphérique est-il ouvert sur la console ?

Avant qu'un programme puisse accéder à un fichier ou à un périphérique, il doit être ouvert, et lorsque le traitement est terminé, il doit être fermé. Un fichier ou un périphérique ouvert, un entier appelé fichier a un descripteur lui étant associé; périphérique lors de l'accès. Il existe deux façons d'ouvrir un fichier ou un périphérique pour les entrées/sorties sans tampon. Tout d'abord, il peut l'ouvrir explicitement, en appelant la fonction open. Dans ce cas, open renvoie le descripteur de fichier à utiliser lors de l'accès au fichier ou au périphérique. Alternativement, le fichier ou le périphérique peut être automatiquement ouvert comme l'un des périphériques logiques d'entrée standard, de sortie standard ou d'erreur standard. Dans ce cas, le descripteur de fichier est la valeur entière 0, 1 ou 2, respectivement. Un fichier ou un périphérique ouvert est fermé en appelant la fonction close. Lorsqu'un programme se termine, tous les périphériques ou fichiers encore ouverts pour les entrées/sorties sans tampon seront fermés. Si une erreur se produit lors d'une opération d'entrée/sortie sans tampon, la fonction renvoie -1 comme valeur et définit un code dans l'entier global errno.

Console d'entrée/sortie

Les entrées/sorties de console peuvent être exécutées de différentes manières. Il existe un mode par défaut, et d'autres modes peuvent être sélectionnés en appelant la fonction ioctl. Lorsque la console est en mode par défaut, l'entrée de la console est mise en mémoire tampon et est lue à partir du clavier ligne par ligne. Les caractères dactylographiés sont renvoyés à l'écran et l'opérateur peut utiliser les fonctions d'édition de ligne standard du système d'exploitation. Un programme n'a pas besoin de lire une ligne entière à la fois (bien que le logiciel système le fasse lors de la lecture d'une entrée clavier dans sa mémoire tampon interne), mais au plus une ligne sera renvoyée au programme pour une seule demande de lecture. Les autres modes d'entrées/sorties de console permettent à un programme d'obtenir des caractères du clavier au fur et à mesure de leur saisie, avec ou sans qu'ils soient renvoyés à l'écran; pour désactiver les fonctions d'édition de ligne système normales; et pour terminer une demande de lecture si une touche n'est pas enfoncée dans un certain intervalle. La sortie vers la console est toujours sans tampon: les caractères vont directement d'un programme à l'affichage. Le seul choix concerne la conversion du caractère de nouvelle ligne; par défaut, cela se convertie par un retour chariot, une séquence de saut de ligne. En option, cette conversion peut être désactivée.

Entrée/sortie vers des périphériques sans console

Les entrées/sorties vers des périphériques autres que la console système sont toujours sans tampon, sans conversion.

Entrée/sortie de fichier

Les programmes appellent les fonctions lecture et écriture pour accéder à un fichier; le transfert commence à la position actuelle du fichier et se poursuit jusqu'à ce que le nombre de caractères spécifié par le programme ait été transféré. La position actuelle d'un fichier peut être manipulée de différentes manières par un programme, permettant un accès séquentiel et aléatoire au fichier. Pour un accès séquentiel, un programme émet simplement des demandes d'entrée/sortie consécutives. Après chaque opération, la position actuelle du fichier est définie sur le caractère suivant le dernier accédé. La fonction lseek fournit un accès aléatoire à un fichier en définissant la position actuelle sur un emplacement de caractère spécifié. La fonction lseek permet de définir la position actuelle d'un fichier par rapport à la fin d'un fichier. Pour les systèmes ne gardant pas de trace du dernier caractère écrit dans un fichier, un tel positionnement ne peut pas toujours être effectué correctement. La fonction open fournit un mode, 0 APPEND, faisant que le fichier ouvert est positionné à sa fin. Ce mode est pris en charge sur les systèmes UNIX 3 et 5, mais pas sur UNIX version 7. Comme avec la fonction lseek, le positionnement peut ne pas être correct pour les systèmes ne gardant pas trace du dernier caractère écrit dans un fichier.



Dernière mise à jour : Dimanche, le 15 octobre 2017