setbuf(3) Library Functions Manual setbuf(3) NOM setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les tampons d'un flux BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include 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 fonctionnalites pour la glibc (consulter feature_test_macros(7)) : setbuffer(), setlinebuf() : Depuis la glibc 2.19 : _DEFAULT_SOURCE glibc 2.19 et anterieures : _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 donnees apparaissent dans le fichier destination ou sur le terminal, des qu'elles sont ecrites. Avec les tampons par blocs, une certaine quantite de donnees est conservee avant d'etre ecrite en tant que bloc. Avec les tampons de lignes, les caracteres sont conserves jusqu'a ce qu'un saut de ligne soit transmis, ou que l'on reclame une lecture sur un flux attache au terminal (typiquement stdin). La fonction fflush(3) peut etre utilisee pour forcer l'ecriture a n'importe quel moment (voir fclose(3)). Normalement, tous les fichiers utilisent des tampons de blocs. Si le flux se rapporte a 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 defaut. La fonction setvbuf() peut etre utilisee sur n'importe quel flux ouvert pour modifier son type de tampon. La parametre mode doit correspondre a l'une des constantes symboliques suivantes : _IONBF pas de tampon _IOLBF tampon de ligne _IOFBF tampon complet A l'exception des fichiers sans tampons, l'argument buf doit pointer sur un tampon contenant au moins size octets. Ce nouveau tampon sera utilise a la place de l'ancien. Si l'argument buf est NULL, seul le mode est affecte. Un nouveau tampon sera alloue automatiquement lors de la prochaine operation de lecture ou d'ecriture. La fonction setvbuf() ne peut etre utilisee qu'apres l'ouverture du flux, et avant toute operation dessus. Les trois autres appels sont, en fait, simplement des alias pour l'appel de setvbuf(). la fonction setbuf() est exactement equivalente a setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ); La fonction setbuffer() est identique, sauf que la taille du tampon est indiquee par l'appelant plutot que la valeur par defaut BUFSIZ. La fonction setlinebuf() est exactement equivalente a : setvbuf(stream, NULL, _IOLBF, 0); VALEUR RENVOYEE La fonction setvbuf() renvoie zero si elle reussit. Elle renvoie une valeur non nulle en cas d'echec (mode n'est pas valable ou la requete ne peut pas etre honoree). 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 utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |setbuf(), setbuffer(), | Securite des threads | MT-Safe | |setlinebuf(), setvbuf() | | | +---------------------------------+--------------------------+---------+ STANDARDS setbuf() setvbuf() C11, POSIX.1-2008. HISTORIQUE setbuf() setvbuf() C89, POSIX.1-2001. CAVEATS POSIX remarque que la valeur de errno est indeterminee apres un appel a setbuf() et note plus loin que dans la mesure ou la valeur de errno n'est pas obligee de rester la meme apres un appel reussi a setbuf(), les applications devraient utiliser setvbuf() a la place afin de detecter 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 a la fin du programme). Par exemple, ceci n'est pas valable : #include 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Frederic Hantrais et Jean- Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 setbuf(3)