setvbuf ()- 控制缓冲区

格式

#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int type, size_t size);

语言级别

ANSI

线程安全

描述

setvbuf() 函数允许控制指定流的缓冲策略和缓冲区大小。 当使用集成文件系统时, setvbuf() 函数仅在 ILE C 中起作用。 流必须引用已打开但未读取或写入的文件。

buf 指向的数组指定您提供 C 库可选择用作流的缓冲区的区域。 bufNULL 指示未提供此类区域, C 库将负责管理其自己的流缓冲区。 如果提供缓冲区,那么它必须存在,直到流关闭为止。

类型 必须是下列其中一项:
含义
_IONBF
未使用缓冲区。
_IOFBF
完全缓冲用于输入和输出。 使用 buf 作为缓冲区,使用 size 作为缓冲区的大小。
_IOLBF
使用线路缓冲。 当写入换行符时,当缓冲区已满时或当请求输入时,将删除缓冲区。

如果 type_IOFBF_IOLBF,那么 size 是提供的缓冲区的大小。 如果 bufNULL,那么 C 库将采用 size 作为其自己的缓冲区的建议大小。 如果 type_IONBF,那么将忽略 bufsize

size 的值必须大于 0

返回值

如果成功, setvbuf() 函数将返回 0 。 如果在参数列表中指定了无效的值,或者如果无法执行请求,那么将返回非零值。

setvbuf() 函数对 stdoutstdinstderr没有任何影响。

警告: 当指定的 关闭时,用作缓冲区的数组仍必须存在。 例如,如果在函数块的作用域内声明了缓冲区,那么必须在结束该函数之前关闭 ,并释放分配给该缓冲区的存储器。

示例

此示例为 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  */
 
}

相关信息