SETBUF(3) Manuel du programmeur Linux SETBUF(3)
NOM
setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les
buffers d'un flux.
SYNOPSIS
#include <stdio.h>
int setbuf (FILE *stream, char *buf);
int setbuffer (FILE *stream, char *buf, size_t size);
int setlinebuf (FILE *stream);
int setvbuf (FILE *stream, char *buf, int mode , size_t
size);
DESCRIPTION
Les trois types de buffers disponibles sont les suivants :
pas de buffers, buffers de blocs, et buffers de lignes.
Quand un flux de sortie n'a pas de buffer, les données
apparaissent dans le fichier destination, ou sur le termi
nal, dès qu'elles sont écrites.
Avec les buffers par blocs, une certaine quantité de
données est conservée avant d'être écrite en tant que
bloc.
Avec les buffers de lignes, les caractères sont conservés
jusqu'à ce qu'un saut de ligne soit transmis, ou que l'on
réclame une lecture sur un flux attaché au terminal (typ
iquement stdin). La fonction fflush(3) peut être utilisée
pour forcer l'écriture à n'importe quel moment. (Voir
fclose(3).)
Normalement tous les fichiers utilisent des buffers de
blocs. Quand une première opération d'entrée/sortie se
déroule sur un fichier, malloc(3) est appelé, et un buffer
est créé. Si le flux se rapporte à un terminal (comme std
out habituellement) il s'agit d'un buffer de ligne. Le
flux standard de sortie d'erreur stderr n'a jamais de
buffer par défaut.
La fonction setvbuf peut être utilisée à tout moment sur
n'importe quel flux ouvert pour modifier son type de
buffer. La paramètre mode doit correspondre à l'une des
constantes symboliques suivantes :
_IONBF pas de buffer
_IOLBF buffer de ligne
_IOFBF buffer complet
A l'exception des fichiers sans buffers, l'argument buf
doit pointer sur un buffer contenant au moins size octets.
Ce nouveau buffer sera utilisé à la place de l'ancien. Si
BSD 7 Novembre 1996 1
SETBUF(3) Manuel du programmeur Linux SETBUF(3)
l'argument buf est NULL, seul le mode est affecté. Un nou
veau buffer sera alloué automatiquement lors de la
prochaine opération de lecture ou d'écriture. La fonction
setvbuf peut être utilisée à tout moment, mais ne peut
changer le mode que lorsque l'eventuel buffer précédent
est inactif : avant la première opération d'entrée/sortie,
ou immédiatement après un appel à fflush.
Les 3 autres appels sont, en fait, simplement des alias
pour l'appel de setvbuf. la fonction setbuf est exacte
ment équivalente à
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUF
SIZ);
La fonction setbuffer est identique, sauf que la taille du
buffer est indiquée par l'appelant plutôt que la valeur
par défaut BUFSIZ. La fonction setlinebuf est exactement
équivalente à :
setvbuf(stream, (char *)NULL, _IOLBF, 0);
VOIR AUSSI
fopen(3), fclose(3), fflush(3), fread(3), malloc(3),
puts(3), printf(3)
CONFORMITÉ
Les fonctions setbuf et setvbuf sont conformes à ANSI
C3.159-1989 (``ANSI C'').
BUGS
Les fonctions setbuffer et setlinebuf ne sont pas porta
bles sur les systèmes BSD antérieurs à 4.2BSD, et
peut-être indisponibles sous Linux. Sur les systèmes
4.2BSD et 4.3BSD, setbuf utilise toujours une taille de
buffer non-optimale, et doit être évitée.
Il faut toujours s'assurer que buf et son contenu existent
encore au moment de la fermeture du flux (qui se produit
automatiquement à la fin du programme).
Par exemple, ceci est INCORRECT :
#include <stdio.h>
int
main (void)
{
char buf [BUFSIZ];
setbuf (stdin, buf);
printf ("Hello, world!\n");
return (0);
}
BSD 7 Novembre 1996 2
SETBUF(3) Manuel du programmeur Linux SETBUF(3)
TRADUCTION
Christophe Blaess, 1997.
BSD 7 Novembre 1996 3