Provided by: manpages-pt-dev_20040726-4_all bug

NAME

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

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

SEE ALSO

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