p The default buffer settings can be overwritten per descriptor .Dv ( STDBUFn ) where .Dv n is the numeric value of the file descriptor represented by the stream, or for all descriptors .Dv ( STDBUF ) . The environment variable value is a letter followed by an optional numeric value indicating the size of the buffer. Valid sizes range from 0B to 1MB. Valid letters are: l -tag -width X -indent t Dv Li U Unbuffered. t Dv Li L Line-buffered. t Dv Li F Fully-buffered. .El
p The function .Xr fflush 3 may be used to force the block out early. (See .Xr fclose 3 . )
p Normally all files are block buffered. When the first .Tn I/O operation occurs on a file, .Xr malloc 3 is called, and an optimally-sized buffer is obtained. If a stream refers to a terminal (as .Em stdout normally does) it is line buffered. The standard error stream .Em stderr is initially unbuffered.
p The .Fn setvbuf function may be used to alter the buffering behavior of a stream. The .Fa mode parameter must be one of the following three macros: l -tag -width _IOFBF -offset indent t Dv _IONBF unbuffered t Dv _IOLBF line buffered t Dv _IOFBF fully buffered .El
p The .Fa size parameter may be given as zero to obtain deferred optimal-size buffer allocation as usual. If it is not zero, then except for unbuffered files, the .Fa buf argument should point to a buffer at least .Fa size bytes long; this buffer will be used instead of the current buffer. (If the .Fa size argument is not zero but .Fa buf is .Dv NULL , a buffer of the given size will be allocated immediately, and released on close. This is an extension to ANSI C; portable code should use a size of 0 with any .Dv NULL buffer.)
p The .Fn setvbuf function may be used at any time, but may have peculiar side effects (such as discarding input or flushing output) if the stream is ``active''. Portable applications should call it only once on any given stream, and before any .Tn I/O is performed.
p The other three calls are, in effect, simply aliases for calls to .Fn setvbuf . Except for the lack of a return value, the .Fn setbuf function is exactly equivalent to the call
p .Dl "setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);"
p The .Fn setbuffer function is the same, except that the size of the buffer is up to the caller, rather than being determined by the default .Dv BUFSIZ . The .Fn setlinebuf function is exactly equivalent to the call:
p .Dl "setvbuf(stream, (char *)NULL, _IOLBF, 0);" .Sh RETURN VALUES The .Fn setvbuf function returns 0 on success, or .Dv EOF if the request cannot be honored (note that the stream is still functional in this case).
p The .Fn setlinebuf function returns what the equivalent .Fn setvbuf would have returned. .Sh SEE ALSO .Xr fclose 3 , .Xr fopen 3 , .Xr fread 3 , .Xr malloc 3 , .Xr printf 3 , .Xr puts 3 .Sh STANDARDS The .Fn setbuf and .Fn setvbuf functions conform to .St -ansiC . .Sh BUGS The .Fn setbuffer and .Fn setlinebuf functions are not portable to versions of x before x 4.2 . On x 4.2 and x 4.3 systems, .Fn setbuf always uses a suboptimal buffer size and should be avoided.