Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
SETBUF
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- CONFORMITÉ
- BOGUES
- VOIR AUSSI
- TRADUCTION
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);
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. 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 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É
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 buf et son contenu existent encore au
moment de la fermeture du flux (qui se produit automatiquement à la fin du
programme).
Par exemple, ceci est INCORRECT :
#include <stdio.h>
int
main (void)
{
char buf [BUFSIZ];
setbuf (stdin, buf);
printf ("Hello, world!
");
return (0);
}
VOIR AUSSI
fclose(3), fflush(3), fopen(3), fread(3), malloc(3),
printf(3), puts(3)
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.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».
|