setbuf
Table des matières
Retour à l'index
NOM
setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les tampons d'un flux
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <stdio.h>
int setvbuf(FILE *restrict stream, char buf[restrict .size],
int mode, size_t size);
void setbuf(FILE *restrict stream, char *restrict buf);
void setbuffer(FILE *restrict stream, char buf[restrict .size],
size_t size);
void setlinebuf(FILE *stream);
Exigences de macros de test de fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
setbuffer(), setlinebuf() :
Depuis la glibc 2.19 :
_DEFAULT_SOURCE
glibc 2.19 et antérieures :
_BSD_SOURCE
DESCRIPTION
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. 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, 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.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
| Interface | Attribut | Valeur
|
|
setbuf(),
setbuffer(),
setlinebuf(),
setvbuf()
| Sécurité des threads | MT-Safe
|
STANDARDS
- setbuf()
-
setvbuf()
C11, POSIX.1-2008.
HISTORIQUE
- setbuf()
-
setvbuf()
C89, POSIX.1-2001.
AVERTISSEMENTS
POSIX remarque que la valeur de errno est indéterminée après un appel à
setbuf() et note plus loin que dans la mesure où la valeur de errno
n'est pas obligée de rester la même après un appel réussi à setbuf(), les
applications devraient utiliser setvbuf() à la place afin de détecter les
erreurs.
BOGUES
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(stdout, buf);
printf("Hello, world!\n");
return 0;
}
VOIR AUSSI
stdbuf(1), fclose(3), fflush(3), fopen(3), fread(3),
malloc(3), printf(3), puts(3)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>,
Frédéric Hantrais <fhantrais@gmail.com>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ATTRIBUTS
-
- STANDARDS
-
- HISTORIQUE
-
- AVERTISSEMENTS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:25 GMT, September 19, 2025