当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ setvbuf()用法及代码示例


C++中的setvbuf()函数用于改变或指定缓冲区的缓冲模式和大小。

setvbuf()原型

int setvbuf(FILE* stream, char* buffer, int mode, size_t size);

setvbuf() 函数将给定文件流的缓冲模式更改为 mode 的值。

如果缓冲区不为空,则缓冲区的大小为 size ,否则函数会自动分配缓冲区(基于 size 的值)。

它在<cstdio> 头文件中定义。

参数:

  • stream :文件流。
  • buffer :指向流使用的缓冲区的指针。
  • mode:缓冲模式。缓冲模式的类型有:
    • _IOFBF:完全缓冲
    • _IOLBF:行缓冲
    • _IONBF:没有缓冲
  • size :缓冲区的大小(以字节为单位)。

返回:

setvbuf() 函数在成功时返回零,在失败时返回非零。

示例:setvbuf() 函数的工作原理

#include <iostream>
#include <cstdio>

#define SIZE 1024

using namespace std;

int main()
{
    char buffer[SIZE] = "...";
    char str[] = "This is first line\nThis is second line";
    FILE *fp = fopen("test.txt","wb+");

    /* no buffering, buffer remains unchanged */
    setvbuf(fp,buffer,_IONBF,SIZE);
    fwrite(str, sizeof(str), 1, fp);
    cout << buffer << endl;

    /* line buffering, only a single line is buffered */
    setvbuf(fp,buffer,_IOLBF,SIZE);
    fwrite(str, sizeof(str), 1, fp);
    cout << buffer << endl;

    /* full buffering, all the contents are buffered */
    setvbuf(fp,buffer,_IOFBF,SIZE);
    fwrite(str, sizeof(str), 1, fp);
    cout << buffer << endl;

    fclose(fp);
    return 0;
}

运行程序时,输出将是:

...
This is second line
This is first line
This is second line

相关用法


注:本文由纯净天空筛选整理自 C++ setvbuf()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。