setvbuf

Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services

NAME

       setbuf,  setbuffer, setlinebuf, setvbuf - stream buffering
       operations


SYNOPSIS

       #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
       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.

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


SEE ALSO

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


STANDARDS

       The   setbuf   and   setvbuf  functions  conform  to  ANSI
       C3.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;
       }
Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services
Copyright (C) 1998 Hurricane Electric. All Rights Reserved.