p The default buffer settings can be overwritten per descriptor .Ev ( STDBUF Ns Ar n , where .Ar n is the numeric value of the file descriptor represented by the stream), or for all descriptors .Ev ( 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 -offset indent -width X t Li U unbuffered t Li L line buffered t 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 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 .Va stdout normally does) it is line buffered. The standard error stream .Va 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 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 HISTORY The .Fn setbuf function first appeared in .At v7 . The .Fn setbuffer function first appeared in x 4.1c . The .Fn setlinebuf function first appeared in x 4.2 . The .Fn setvbuf function first appeared in x 4.4 . .Sh BUGS The .Fn setbuf function usually uses a suboptimal buffer size and should be avoided.