setbuf(3S) LIBRARY FUNCTIONS setbuf(3S)
NAME
setbuf, setvbuf - assign buffering to a stream
SYNOPSIS
#include <stdio.h>
void setbuf (FILE *stream, char *buf);
int setvbuf (FILE *stream, char *buf, int type, sizet
size);
DESCRIPTION
setbuf may be used after a stream [see intro(3)] has been
opened but before it is read or written. It causes the
array pointed to by buf to be used instead of an automati-
cally allocated buffer. If buf is the NULL pointer
input/output will be completely unbuffered.
While there is no limititation on the size of the buffer,
the constant BUFSIZ, defined in the <stdio.h> header file,
is typically a good buffer size:
char buf[BUFSIZ];
setvbuf may be used after a stream has been opened but
before it is read or written. type determines how stream
will be buffered. Legal values for type (defined in
stdio.h) are:
IOFBF causes input/output to be fully buffered.
IOLBF causes output to be line buffered; the buffer
will be flushed when a newline is written, the
buffer is full, or input is requested.
IONBF causes input/output to be completely unbuffered.
If buf is not the NULL pointer, the array it
points to will be used for buffering, instead of
an automatically allocated buffer. size speci-
fies the size of the buffer to be used. If
input/output is unbuffered, buf and size are
ignored. For a further discussion of buffering,
see stdio(3S).
SEE ALSO
fopen(3S), getc(3S), malloc(3C), putc(3S), stdio(3S).
DIAGNOSTICS
If an illegal value for type is provided, setvbuf returns a
non-zero value. Otherwise, it returns zero.
NOTES
A common source of error is allocating buffer space as an
1
setbuf(3S) LIBRARY FUNCTIONS setbuf(3S)
``automatic'' variable in a code block, and then failing to
close the stream in the same block.
The first four bytes of buf are used for internal bookkeep-
ing of the stream and, therefore, buf contains size-4 bytes
when full. It is recommended to use the automatically allo-
cated buffer when using setvbuf.
2