Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SETBUF(3)		   Linux Programmer's Manual		     SETBUF(3)

       setbuf, setbuffer, setlinebuf, setvbuf -	stream buffering operations

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

       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  buf-
       fer.  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);

       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

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

       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-

       For example, the	following is illegal:

       #include	<stdio.h>
       int main()
	   char	buf[BUFSIZ];
	   setbuf(stdin, buf);
	   printf("Hello, world!\n");
	   return 0;

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

Linux				  2001-06-09			     SETBUF(3)


Want to link to this manual page? Use this URL:

home | help