setbuf,  setbuffer, setlinebuf, setvbuf - stream buffering
       operations


SYNOPSIS

       #include <stdio.h>

       void setbuf(FILE *stream, char *buf);
       void setbuffer(FILE *stream, char *buf, size_tsize);
       void 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  new­
       line  is  output or input is read from any stream attached
       to a terminal  device  (typically  stdin).   The  function
       fflush(3)  may be used to force the block out early.  (See
       fclose(3).)  Normally 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 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
       allocated  on  the  next  read  or  write  operation.  The
       setvbuf function may only be used after opening  a  stream
       and before any other operations have been performed on it.

       The other three calls are, in effect, simply  aliases  for
       calls  to setvbuf.  The setbuf function is exactly equiva­
       lent to the call

              setvbuf(stream, buf, buf ? _IOFBF  :  _IONBF,  BUF­
              SIZ);

       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);


RETURN VALUE

       The function setvbuf returns 0 on success.  It can  return
       any  value  on  failure,  but returns nonzero when mode is
       invalid or the request cannot  be  honoured.  It  may  set
       errno on failure.  The other functions are void.


CONFORMING TO

       The   setbuf   and   setvbuf  functions  conform  to  ANSI
       X3.159-1989 (``ANSI C'').


BUGS

       The setbuffer and setlinebuf functions are not portable to
       versions  of  BSD  before  4.2BSD, and are available under
       Linux since libc 4.5.21.  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;
       }


SEE ALSO

       fclose(3),  fflush(3),  fopen(3),   fread(3),   malloc(3),
       printf(3), puts(3)


Man(1) output converted with man2html