int setvbuf ( FILE * stream , char * buffer , int mode , size_t size );
Change stream buffering.
Changes the buffer to be used for I/O operations with the specified stream. Size and mode for the buffer can be specified.
This function should be called once the file associated with the stream has been opened but before any input or output operation has been done.
The size of the buffer is specified by the size parameter, and can be any value between 2 and 32767 in bytes, this value may be rounded down by some system due to specific alignment.
buffer can be NULL. In that case system dinamically allocates the amount of memory requested by size and uses it as buffer for the stream.
The type parameter is used to specify if the buffer has to be fully buffered, line buffered or if the stream has to be unbuffered (see below).
With buffered streams, writing operations do not write directly to the physical device associated with them; instead the data is accumulated in the buffer and written to the device as a block. This can be forced flushing the stream by calling fflush or by closing the file (fclose). All buffers are also flushed when program terminates.
With unbuffered streams, data is directly written to the device on each writing operation.
Normally, files are opened with a default allocated buffer, where this function can be used to define a user-allocated buffer or to disable buffering for the file. System standard streams like stdout and stderr are unbuffered by default if they are not redirected.
|_IOFBF||Full buffering: On output the data is written to the file once the buffer is full. On Input the buffer is filled when an input operation is requested and buffer is empty.|
|_IOLBF||Line buffering: On output the data will be written to the file when a newline characted is written to the stream or when the buffer is full, whatever happens first. On Input the buffer is filled when an input operation is requested and buffer is empty.|
|_IONBF||No buffering: No buffer is used. Each I/O operation is directly carried out to the file without buffering. buffer and size parameters are ignored.|
If the buffer is correctly assigned to the file a 0 value is returned.
On error, a non-zero value is returned. This can be because an invalid type or size has been specified or because an error allocating memory (if NULL buffer was specified).
/* setvbuf example */
setvbuf ( pFile , NULL , _IOFBF , 1024 );
// File operations here
In this example a file example.txt is created and a full buffer of 1024 is assigned to its stream, so the data outputed to this stream is only written to the file each time the 1024-bytes buffer is full.
setbuf, fopen, fflush