setbuf
Header: <stdio.h>
Sets the internal buffer to use for stream operations. It should be at least BUFSIZ characters long.
# Declarations
void setbuf( FILE *stream, char *buffer );
(until C99)
void setbuf( FILE *restrict stream, char *restrict buffer );
(since C99)
#define BUFSIZ /*unspecified*/
# Parameters
stream: the file stream to set the buffer tobuffer: pointer to a buffer for the stream to use. If a null pointer is supplied, the buffering is turned off
# Return value
None.
# Notes
If BUFSIZ is not the appropriate buffer size, setvbuf can be used to change it.
setvbuf should also be used to detect errors, since setbuf does not indicate success or failure.
This function may only be used after stream has been associated with an open file, but before any other operation (other than a failed call to setbuf/setvbuf).
A common error is setting the buffer of stdin or stdout to an array whose lifetime ends before the program terminates:
# Example
#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');
}