NAME

     setbuf, setvbuf - assign buffering to a stream


SYNOPSIS

     #include <stdio.h>

     int setbuf(FILE *stream, char *buf)
     int setvbuf(FILE *stream, char *buf, int type, 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
     encountered or  input  is  read  from  stdin.   Fflush  (see
     fclose(3))  may  be used to force the block out early.  Nor-
     mally all files are block buffered.  A  buffer  is  obtained
     from  malloc(3)  upon the first getc or putc(3) on the file.
     If the standard stream stdout refers to  a  terminal  it  is
     line  buffered.  The standard stream stderr is always unbuf-
     fered.

     Setbuf is used after a stream has been opened but before  it
     is read or written.  The character array buf is used instead
     of an automatically allocated buffer.  If buf  is  the  con-
     stant  pointer  NULL, input/output will be completely unbuf-
     fered.  A manifest constant BUFSIZ tells how big an array is
     needed:

          char buf[BUFSIZ];

     Setvbuf, an alternate form of setbuf, is used after a stream
     has  been  opened  but before it is read or written.  It has
     three uses, depending on the value of the type argument:

     setvbuf(stream, buf, _IOFBF, size)
          Causes input/output to  be  fully  buffered  using  the
          character  array  buf  whose  size is determined by the
          size argument.  If buf is the  constant  pointer  NULL,
          then an automatically allocated buffer will be used.

     setvbuf(stream, buf, _IOLBF, size)
          Like above, except that output will be  line  buffered,
          i.e. the buffer will be flushed when a newline is writ-
          ten, the buffer is full, or input is requested.

     setvbuf(stream, buf, _IONBF, size)
          Causes input/output to be completely  unbuffered.   Buf
          and size are ignored.

     A file can be changed between unbuffered, line buffered,  or
     block  buffered  by using freopen (see fopen(3)) followed by
     the appropriate setvbuf call.


SEE ALSO

     fopen(3), getc(3), putc(3), malloc(3),  fclose(3),  puts(3),
     printf(3), fread(3).