setbuf
| Défini dans l'en-tête <stdio.h>
|
||
void setbuf( FILE* stream, char* buffer );
|
(jusqu'à C99) | |
void setbuf( FILE* restrict stream, char* restrict buffer );
|
(depuis C99) | |
#define BUFSIZ /* unspecified */
|
||
Définit le tampon interne à utiliser pour les opérations sur le flux. Il doit mesurer au moins BUFSIZ caractères.
Si buffer n'est pas nul, équivaut à setvbuf(stream, buffer, _IOFBF, BUFSIZ).
Si buffer est nul, équivaut à setvbuf(stream, NULL, _IONBF, 0), ce qui désactive la mise en tampon.
Paramètres
| stream | - | le flux de fichier auquel attribuer le tampon |
| buffer | - | pointeur vers un tampon à utiliser pour le flux. Si un pointeur nul est fourni, la mise en tampon est désactivée |
Notes
Si BUFSIZ n'est pas la taille de tampon appropriée, setvbuf peut être utilisé pour la modifier.
setvbuf devrait également être utilisé pour détecter les erreurs, car setbuf n'indique pas le succès ou l'échec.
Cette fonction ne peut être utilisée qu'après que stream a été associé à un fichier ouvert, mais avant toute autre opération (autre qu'un appel échoué à setbuf/setvbuf).
Une erreur courante consiste à définir le tampon de stdin ou stdout sur un tableau dont la durée de vie se termine avant la fin du programme :
int main(void)
{
char buf[BUFSIZ];
setbuf(stdin, buf);
} // lifetime of buf ends, undefined behavior
Exemple
setbuf peut être utilisé pour désactiver la mise en tampon sur les flux qui nécessitent une sortie immédiate.
#include <stdio.h>
#include <threads.h>
int main(void)
{
setbuf(stdout, NULL); // unbuffered stdout
putchar('a'); // 'a' appears immediately if stdout is unbuffered
thrd_sleep(&(struct timespec){ .tv_sec = 1 }, NULL); // sleep 1 sec
putchar('b');
}
Sortie :
ab
Références
- Norme C23 (ISO/IEC 9899:2024) :
- 7.21.5.5 La fonction setbuf (p : à déterminer)
- Norme C17 (ISO/IEC 9899:2018) :
- 7.21.5.5 La fonction setbuf (p : 225)
- Norme C11 (ISO/IEC 9899:2011) :
- 7.21.5.5 La fonction setbuf (p : 307-308)
- Norme C99 (ISO/IEC 9899:1999) :
- 7.19.5.5 La fonction setbuf (p : 273)
- Norme C89/C90 (ISO/IEC 9899:1990) :
- 4.9.5.5 La fonction setbuf
Voir aussi
| définit le tampon et sa taille pour un flux de fichier (fonction) | |
Documentation C++ pour setbuf
| |