Provided by: manpages-zh_1.5.2-1_all bug

NAME

       setbuf, setbuffer, setlinebuf, setvbuf - 流缓冲操作

SYNOPSIS 总览

       #include <stdio.h>

       void setbuf(FILE *stream, char *buf);
       void setbuffer(FILE *stream, char *buf, size_t size);
       void setlinebuf(FILE *stream);
       int setvbuf(FILE *stream, char *buf, int mode , size_t size);

DESCRIPTION 描述

       有三种类型的缓冲策略,它们是无缓冲,块缓冲和行缓冲。当输出流无缓冲时,信息在写的同时出现于目标文件或终端上;当是块缓冲时,字符被暂存,然后一起写入;当是行缓冲时,字符被暂存,直到要输出一个新行符,或者从任何与终端设备连接的流中
       (典型的是 stdin) 读取输入时才输出。函数 fflush(3)  可以用来强制提前输出。(参见  fclose(3))
       通常所有文件都是块缓冲的。当文件       I/O       操作在文件上发生时,将调用      malloc(3)
       ,获得一个缓冲。如果流指向一个终端  (通常  stdout  都是这样),那么它是行缓冲的。标准错误流
       stderr 默认总是无缓冲的。

       函数 setvbuf 可以用在任何打开的流上,改变它的缓冲。参数 mode 必须是下列三个宏之一:

              _IONBF 无缓冲

              _IOLBF 行缓冲

              _IOFBF 完全缓冲

       除非是无缓冲的文件,否则参数           buf           应当指向一个长度至少为           size
       字节的缓冲;这个缓冲将取代当前的缓冲。如果参数 bufNULL  ,只有这个模式会受到影响;下次
       read           或           write          操作还将分配一个新的缓冲。函数          setvbuf
       只能在打开一个流,还未对它进行任何其他操作之前使用。

       其他三个函数调用是函数 setvbuf 的别名,函数 setbuf 与使用下列语句完全等价:

              setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);

       函数  setbuffer   与此相同,但是缓冲的长度由用户决定,而不是由默认值   BUFSIZ   决定。函数
       setlinebuf 与使用下列语句完全等价:

              setvbuf(stream, (char *)NULL, _IOLBF, 0);

RETURN VALUE 返回值

       函数  setvbuf  成功执行时返回 0。它失败时可能返回任何值,但是当 It can return any value on
       failure,           but           returns           nonzero            when            mode
       不正确,或者不能实现请求时,必须返回非零值。它在失败时可能设置                       errno
       。其他函数没有返回值。

CONFORMING TO 标准参考

       函数 setbufsetvbuf 遵循 ANSI X3.159-1989 (``ANSI C'') 标准。

BUGS

       函数 setbuffersetlinebuf 无法移植到 4.2BSD  之前的  BSD  版本,在  Linux  中仅在  libc
       4.5.21      之后的系统中可用。在      4.2BSD      和      4.3BSD      系统中,      setbuf
       总是使用非最优的缓冲大小,应当避免使用它。

       在 stream 被关闭时,必须确保 buf 和它指向的空间仍然存在。这通常发生在程序终止时。

       例如,下列调用是非法的:

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

SEE ALSO 参见

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