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

FreeBSD Manual Pages


home | help
setbuf(3C)		 Standard C Library Functions		    setbuf(3C)

       setbuf, setvbuf - assign	buffering to a stream

       #include	<stdio.h>

       void setbuf(FILE	*stream, char *buf);

       int setvbuf(FILE	*stream, char *buf, int	type, size_t size);

       The setbuf() function may be used after the stream pointed to by	stream
       (see intro(3)) is opened	but before it is read or  written.  It	causes
       the  array pointed to by	buf to be used instead of an automatically al-
       located buffer. If buf is the null pointer, input/output	will  be  com-
       pletely	unbuffered.   The  constant   BUFSIZ, defined in the <stdio.h>
       header, indicates the size of the array pointed to by buf.

       The setvbuf() function may be used after	a stream is opened  but	before
       it  is  read or written.	 The type argument determines how  stream will
       be buffered. Legal values for  type (defined in <stdio.h>) are:

       _IOFBF	       Input/output to be fully	buffered.

       _IOLBF	       Output to be line buffered;  the	buffer will be flushed
		       when a NEWLINE is written, the buffer is	full, or input
		       is requested.

       _IONBF	       Input/output to be completely unbuffered.

       If buf is not the null pointer, the array it points to will be used for
       buffering,  instead of an automatically allocated buffer.  The size ar-
       gument specifies	the size of the	buffer to be used. If input/output  is
       unbuffered,  buf	and  size are ignored.

       For a further discussion	of buffering, see stdio(3C).

       If an illegal value for	type is	provided, setvbuf() returns a non-zero
       value.	Otherwise, it returns 0.

       A common	source of error	is allocating buffer space as  an  "automatic"
       variable	 in  a code block, and then failing to close the stream	in the
       same block.

       When using setbuf(), buf	should always be sized using  BUFSIZ.  If  the
       array  pointed  to  by buf is larger than BUFSIZ, a portion of buf will
       not be used.  If	buf is smaller than BUFSIZ, other memory may be	 unex-
       pectedly	overwritten.

       Parts  of  buf will be used for internal	bookkeeping of the stream and,
       therefore, buf will contain less	than size bytes	when full. It is  rec-
       ommended	that  stdio(3C)	be used	to handle buffer allocation when using

       See attributes(5) for descriptions of the following attributes:

       |      ATTRIBUTE	TYPE	     |	    ATTRIBUTE VALUE	   |
       |Interface Stability	     |Standard			   |
       |MT-Level		     |MT-Safe			   |

       fopen(3C), getc(3C), malloc(3C),	 putc(3C),  stdio(3C),	attributes(5),

SunOS 5.10			  14 Aug 2002			    setbuf(3C)


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

home | help