COHERENT manpages
This page displays the COHERENT manpage for setvbuf() [Set alternative file-stream buffer].
List of available manpages
Index
setvbuf() -- STDIO Function (libc)
Set alternative file-stream buffer
#include <stdio.h>
int setvbuf(fp, buffer, mode, size)
FILE *fp; char *buffer; int mode; size_t size;
When the functions fopen() and freopen() open a stream, they automatically
establish a buffer for it. The buffer is BUFSIZ bytes long. BUFSIZ is a
manifest constant that is defined in the header stdio.h.
The function setvbuf() alters the buffer used with the stream pointed to by
fp from its default buffer to buffer. Unlike the related function setbuf(),
it also allows you set the size of the new buffer as well as the form of
buffering.
buffer is the address of the new buffer. size is its size, in bytes. mode
is the manner in which you wish the stream to be buffered, as follows:
_IOFBF Fully buffered
_IOLBF Line-buffered
_IONBF No buffering
These constants are defined in the header stdio.h.
You should call setvbuf() after a stream has been opened but before any
data have been written to or read from the stream. For example, the
following give fp a 50-byte buffer that is line-buffered:
char buffer[50];
FILE *fp;
fopen(fp, "r");
setvbuf(fp, buffer, _IOLBF, sizeof(buffer));
On the other hand, the following turns off buffering for the standard
output stream:
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf() returns zero if the new buffer could be established correctly.
It returns a value other than zero if something went wrong or if an invalid
parameter is given for mode or size.
Example
This example uses setvbuf() to turn off buffering and echo.
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
main(void)
{
int c;
if(setvbuf(stdin, NULL, _IONBF, 0))
fprintf(stderr, "Couldn't turn off stdin buffer\n");
if(setvbuf(stdout, NULL, _IONBF, 0))
fprintf(stderr, "Couldn't turn off stdout buffer\n");
while((c = getchar()) != EOF)
putchar(c);
}
See Also
fclose(),
fflush(),
fopen(),
freopen(),
libc,
setbuf()
ANSI Standard, §7.9.5.6
Notes
setvbuf() affects the buffering of an I/O stream but does not affect any
buffering that performed by the device upon which the text is typed. Some
devices (e.g., /dev/tty) are buffered by default. To turn off the
buffering of what a user types, you must both turn off buffering on the
input stream and turn off buffering on the device itself. For example, to
turn off buffering on a terminal device, you must both call setvbuf() to
change the size of the input buffering to zero, and call stty() to put the
terminal device into raw mode.