NOM
setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les tampons 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);
Exigences de macros de test de fonctionnalités pour la glibc (voir
feature_test_macros(7)) :
setbuffer(), setlinebuf() : _BSD_SOURCE
Les trois types de tampons disponibles sont les suivants : pas de
tampons, tampons de blocs, et tampons de lignes. Quand un flux de
sortie n’a pas de tampon, les données apparaissent dans le fichier
destination, ou sur le terminal, dès qu’elles sont écrites. Avec les
tampons par blocs, une certaine quantité de données est conservée avant
d’être écrite en tant que bloc. Avec les tampons 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 tampons de blocs. Quand
une première opération d’entrée-sortie se déroule sur un fichier,
malloc(3) est appelée, et un tampon est créé. Si le flux se rapporte à
un terminal (comme stdout habituellement) il s’agit d’un tampon de
ligne. Le flux standard de sortie d’erreur stderr n’a jamais de tampon
par défaut.
La fonction setvbuf() peut être utilisée sur n’importe quel flux ouvert
pour modifier son type de tampon. La paramètre mode doit correspondre à
l’une des constantes symboliques suivantes :
_IONBF pas de tampon
_IOLBF tampon de ligne
_IOFBF tampon complet
À l’exception des fichiers sans tampons, l’argument buf doit pointer
sur un tampon contenant au moins size octets. Ce nouveau tampon sera
utilisé à la place de l’ancien. Si l’argument buf est NULL, seul le
mode est affecté. Un nouveau tampon 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 tampon 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 renvoie une
valeur non nulle en cas d’échec (mode n’est pas valable ou la requête
ne peut pas être honorée). Elle peut remplir errno en cas d’erreur. Les
autres fonctions ne renvoient rien.
Les autres fonctions ne renvoient pas de valeur.
CONFORMITÉ
Les fonctions setbuf() et setvbuf() sont conformes à C89 et C99.
BOGUES
Les fonctions setbuffer() et setlinebuf() ne sont pas portables sur les
systèmes BSD antérieurs à BSD 4.2, et sont disponibles sous Linux
depuis la libc 4.5.21. Sur les systèmes BSD 4.2 et BSD 4.3, setbuf()
utilise toujours une taille de tampon non optimale, et doit être
évitée.
Il faut toujours s’assurer que le contenu de buf existe encore au
moment de la fermeture du flux stream (qui se produit automatiquement à
la fin du programme). Par exemple, ceci n’est pas valable :
#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)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Nicolas François
<nicolas.francois@centraliens.net> et l’équipe francophone de
traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».