SETBUF(3)           Linux Programmer's Manual           SETBUF(3)

       setbuf,  setbuffer, setlinebuf, setvbuf - stream buffering

       #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

       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

       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
       allocated  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

       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-

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

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

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

       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;

BSD MANPAGE              29 November 1993                       1