NAME
setbuf, setbuffer, setlinebuf, setvbuf - stream buffering
operations
SYNOPSIS
#include <stdio.h>
int setbuf(FILE *stream, char *buf));
int setbuffer(FILE *stream, char *buf, size_tsize
int setlinebuf(FILE *stream));
int setvbuf(FILE *stream, char *buf, int mode , size_t
size));
DESCRIPTION
The three types of buffering available are unbuffered, block
buffered, and line buffered. When an output stream is
unbuffered, information appears on the destination file or
terminal as soon as written; when it is block buffered many
characters are saved up and written as a block; when it is
line buffered characters are saved up until a newline is
output or input is read from any stream attached to a termi-
nal device (typically stdin). The function fflush(3) may be
used to force the block out early. (See fclose(3).) Nor-
mally all files are block buffered. When the first I/O
operation occurs on a file, malloc(3) is called, and a
buffer is obtained. If a stream refers to a terminal (as
stdout normally does) it is line buffered. The standard
error stream stderr is always unbuffered by default.
The setvbuf function may be used at any time on any open
stream to change its buffer. The mode parameter must be one
of the following three macros:
_IONBF
unbuffered
_IOLBF
line buffered
_IOFBF
fully buffered
Except for unbuffered files, the buf argument should point
to a buffer at least size bytes long; this buffer will be
used instead of the current buffer. If the argument buf is
NULL, only the mode is affected; a new buffer will be allo-
cated on the next read or write operation. The setvbuf
function may be used at any time, but can only change the
mode of a stream when it is not ``active'': that is, before
any I/O, or immediately after a call to fflush.
The other three calls are, in effect, simply aliases for
calls to setvbuf. The setbuf function is exactly equivalent
to the call
setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
The setbuffer function is the same, except that the size of
the buffer is up to the caller, rather than being determined
by the default BUFSIZ. The setlinebuf function is exactly
equivalent to the call:
setvbuf(stream, (char *)NULL, _IOLBF, 0);
SEE ALSO
fopen(3), fclose(3), fflush(3), puts(3), printf(3)
STANDARDS
The setbuf and setvbuf functions conform to ANSI C3.159-1989
(``ANSI C'').
BUGS
The setbuffer and setlinebuf functions are not portable to
versions of BSD before 4.2BSD, and may not be available
under Linux. On 4.2BSD and 4.3BSD systems, setbuf always
uses a suboptimal buffer size and should be avoided.
You must make sure that both buf and the space it points to
still exist by the time stream is closed, which also happens
at program termination.
For example, the following is illegal:
#include <stdio.h>
int main()
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}