SETBUF(3)

NOM
setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les tampons d'un flux

SYNOPSIS
#include <stdio.h>

int setvbuf(FILE *restrict stream, char *restrict buf,
            int mode, size_t size);

void setbuf(FILE *restrict stream, char *restrict buf);
void setbuffer(FILE *restrict stream, char *restrict buf,
            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():
    Since glibc 2.19:
        _DEFAULT_SOURCE
    Glibc 2.19 and earlier:
        _BSD_SOURCE

DESCRIPTION
The three types of buffering available are unbuffered, block buffered, and line buffered. When an output stream is unbuffered, information appears on the destination file or terminal as soon as written; when it is block buffered, many characters are saved up and written as a block; when it is line buffered, characters are saved up until a newline is output or input is read from any stream attached to a terminal device (typically stdin). The function fflush(3) may be used to force the block out early. (See fclose(3).)

Normally all files are block buffered. If a stream refers to a terminal (as stdout normally does), it is line buffered. The standard error stream stderr is always unbuffered by default.

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

CONFORMITÉ
Les fonctions setbuf() et setvbuf() sont conformes à C89 et C99.

NOTES
POSIX notes that the value of errno is unspecified after a call to setbuf() and further notes that, since the value of errno is not required to be unchanged after a successful call to setbuf(), applications should instead use setvbuf() in order to detect errors.

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)

COLOPHON
Cette page fait partie de la publication 5.13 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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> et Frédéric Hantrais <fhantrais@gmail.com> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 à debian-l10n-french@lists.debian.org.