setbuf   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (3)
Updated: 26 juillet 2007
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
setbuf, setbuffer, setlinebuf, setvbuf - Agir sur les tampons d'un flux  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#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 fonctionalités pour la glibc (voir feature_test_macros(7)) :

setbuffer(), setlinebuf() : _BSD_SOURCE  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
La fonction setvbuf() renvoie zéro si elle réussit. Elle peut renvoyer n'importe quelle valeur en cas d'échec, mais toujours une valeur non nulle si le mode est invalide, ou si la requête ne peut pas être honorée. Elle peut remplir errno en cas d'erreur. Les autres fonctions ne renvoient rien.  



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Les fonctions setbuf() et setvbuf() sont conformes à C89 et C99.  



BOGUES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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 l'espace pointé par buf existe encore au moment de la fermeture du flux (qui se produit automatiquement à la fin du programme). Par exemple, ceci n'est pas valide :

#include <stdio.h>

int
main (void)
{
    char   buf [BUFSIZ];

    setbuf (stdin, buf);
    printf ("Hello, world!\n");
    return (0);
}
 



VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
fclose(3), fflush(3), fopen(3), fread(3), malloc(3), printf(3), puts(3)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 7 novembre 1996 et révisée le 6 juin 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 setbuf ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
CONFORMITÉ
BOGUES
VOIR AUSSI
TRADUCTION

Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:53:01, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional