SETBUF(S) XENIX System V SETBUF(S)
Name
setbuf, setvbuf - Assigns buffering to a stream.
Syntax
#include <stdio.h>
void setbuf (stream, buf)
FILE *stream;
char *buf;
int setvbuf (stream, type, buf, size)
FILE *stream;
char *buf;
int type, size;
Description
setbuf is used after a stream has been opened but before it
is read or written. It causes the character array buf to be
used instead of an automatically allocated buffer. If buf
is the constant pointer NULL, input/output will be
completely unbuffered.
A manifest constant BUFSIZ, defined in the <stdio.h> file,
tells how big an array is needed:
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 specifies the size of the buffer to be used.
The constant BUFSIZ in <stdio.h> is suggested as a good
buffer size. If input/output is unbuffered, buf and size
are ignored.
By default, output to a terminal is line buffered and all
other input/output is fully buffered.
A buffer is normally obtained from malloc(S) upon the first
getc(S) or putc(S) on the file, except that output streams
directed to terminals, and the standard error stream stderr
Page 1 (printed 8/7/87)
SETBUF(S) XENIX System V SETBUF(S)
are normally not buffered. A common source of error is
allocation of buffer space as an ``automatic'' variable in a
code block, and then failing to close the stream in the same
block.
See Also
fopen(S), getc(S), malloc(S), putc(S), stdio(S)
Diagnostics
If an illegal value for type or size is provided, setvbuf
returns a non-zero value. Otherwise, the value returned
will be zero.
Page 2 (printed 8/7/87)