ABCDEFGHIJKLMNOPQRSTUVWXYZ

setbuffer

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



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 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  cur-
       rent 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 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  BUF-
       SIZ.  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 termina-
       tion.

       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)



Linux                             2001-06-09                         SETBUF(3)