rattacher a un buffer d'une taille derisoire ?
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 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 trans
mis, ou que l'on réclame une lecture sur un flux attaché au terminal (typiquement stdin). La fonc
tion 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 stan
dard 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 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 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/sor
tie, 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 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);
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 portables 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);
}
TRADUCTION
Christophe Blaess, 1997.
BSD 7 Novembre 1996
---------------
Do androïds dream of electric sheep ?