setvbuf ()- 控制缓冲区
格式
#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int type, size_t size);语言级别
ANSI
线程安全
是
描述
setvbuf() 函数允许控制指定流的缓冲策略和缓冲区大小。 当使用集成文件系统时, setvbuf() 函数仅在 ILE C 中起作用。 流必须引用已打开但未读取或写入的文件。
buf 指向的数组指定您提供 C 库可选择用作流的缓冲区的区域。 buf 值 NULL 指示未提供此类区域, C 库将负责管理其自己的流缓冲区。 如果提供缓冲区,那么它必须存在,直到流关闭为止。
类型 必须是下列其中一项:
- 值
- 含义
- _IONBF
- 未使用缓冲区。
- _IOFBF
- 完全缓冲用于输入和输出。 使用 buf 作为缓冲区,使用 size 作为缓冲区的大小。
- _IOLBF
- 使用线路缓冲。 当写入换行符时,当缓冲区已满时或当请求输入时,将删除缓冲区。
如果 type 是 _IOFBF 或 _IOLBF,那么 size 是提供的缓冲区的大小。 如果 buf 为 NULL,那么 C 库将采用 size 作为其自己的缓冲区的建议大小。 如果 type 为 _IONBF,那么将忽略 buf 和 size 。
size 的值必须大于 0。
返回值
如果成功, setvbuf() 函数将返回 0 。 如果在参数列表中指定了无效的值,或者如果无法执行请求,那么将返回非零值。
setvbuf() 函数对 stdout, stdin或 stderr没有任何影响。
警告: 当指定的 流 关闭时,用作缓冲区的数组仍必须存在。 例如,如果在函数块的作用域内声明了缓冲区,那么必须在结束该函数之前关闭 流 ,并释放分配给该缓冲区的存储器。
示例
此示例为 stream1 设置 buf 缓冲区,并指定将不缓冲 stream2 的输入。
#include <stdio.h>
#define BUF_SIZE 1024
char buf[BUF_SIZE];
FILE *stream1, *stream2;
int main(void)
{
stream1 = fopen("myfile1.dat", "r");
stream2 = fopen("myfile2.dat", "r");
/* stream1 uses a user-assigned buffer of BUF_SIZE bytes */
if (setvbuf(stream1, buf, _IOFBF, sizeof(buf)) != 0)
printf("Incorrect type or size of buffer\n");
/* stream2 is unbuffered */
if (setvbuf(stream2, NULL, _IONBF, 0) != 0)
printf("Incorrect type or size of buffer\n");
/* This is a program fragment and not a complete function example */
}