setvbuf()

Associate a buffer with a stream

Synopsis:

#include <stdio.h>

int setvbuf( FILE *fp,
             char *buf,
             int mode,
             size_t size );

Arguments:

fp
The stream that you want to associate with a buffer.
buffer
NULL, or a pointer to the buffer; see below.
mode
How you want the stream to be buffered:
size
The size of the buffer.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The setvbuf() function associates a buffer with the stream designated by fp. If you want to call setvbuf(), you must call it after opening the stream, but before doing any reading, writing, or seeking.

If buf isn't NULL, the buffer it points to is used instead of an automatically allocated buffer.

Returns:

0
Success.
EINVAL
The mode argument isn't valid.
ENOMEM
The buf argument is NULL, size isn't 0, and there isn't enough memory available to allocate a buffer.

Examples:

#include <stdio.h>
#include <stdlib.h>

int main( void )
{
    char *buf;
    FILE *fp;

    fp = fopen( "file", "r" );
    buf = malloc( 1024 );
    setvbuf( fp, buf, _IOFBF, 1024 );
    
    /* work with fp */
    ...
    
    fclose( fp );

    /* This is OUR buffer, so we have
     * to free it.  Do that AFTER
     * you've closed the file.
     */

    free( buf );
    return EXIT_SUCCESS;
}

Classification:

ANSI, POSIX 1003.1

Safety:
Cancellation point No
Interrupt handler No
Signal handler No
Thread Yes

See also:

fopen(), setbuf()