Provided by:
manpages-fr_1.67.0-1_all 
NOM
setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les buffers d’un
flux.
SYNOPSIS
#include <stdio.h>
void setbuf (FILE *stream, char *buf);
void setbuffer (FILE *stream, char *buf, size_t size);
void 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 terminal, 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
(typiquement 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 stdout 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 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
À 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 l’argument buf est NULL, seul le
mode est affecté. Un nouveau buffer sera alloué automatiquement lors de
la prochaine opération de lecture ou d’écriture. La fonction setvbuf
ne peut être utilisée qu’après l’ouverture du flux, et avant toute
opération dessus.
Les trois autres appels sont, en fait, simplement des alias pour
l’appel de setvbuf. la fonction setbuf est exactement équivalente à
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
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);
VALEUR RENVOYÉE
La fonction setvbuf renvoie zéro si elle réussit. Elle peut renvoyer
n’importe quelle valeur en cas d’échec, mais toujours une valeur non-
nulle si le mode est invalide, ou si la requête ne peut pas être
honorée. Elle peut remplir errno en cas d’erreur. Les autres fonctions
ne renvoient rien.
CONFORMITÉ
Les fonctions setbuf et setvbuf sont conformes à ANSI X3.159-1989
(« ANSI C »).
BOGUES
Les fonctions setbuffer et setlinebuf ne sont pas portables sur les
systèmes BSD antérieurs à 4.2BSD, et sont disponibles sous Linux depuis
la LibC 4.5.21. 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);
}
VOIR AUSSI
fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)
TRADUCTION
Christophe Blaess, 1996-2003.