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


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


C++ 中的setbuf() 函数设置内部缓冲区以用于流的 I/O 操作。

setbuf()原型

void setbuf(FILE* stream, char* buffer);

如果缓冲区不为空,则相当于调用 setvbuf(stream, buffer, _IOFBF, BUFSIZ)

如果缓冲区为空,则相当于调用 setvbuf(stream, NULL, _IONBF, 0) 。在这种情况下,缓冲被关闭。

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

参数:

  • stream :文件流。
  • buffer :指向缓冲区的指针,可能为空或不为空。如果为空,则关闭缓冲,否则应至少为 BUFSIZ 字节。

返回:

None

以下 2 个示例说明了 setbuf() 函数的使用。这两个程序都使用文件操作。在第一个示例中,使用setbuf() 设置缓冲区以在内部存储文件的内容。

在下一个示例中,语句setbuf(fp, NULL) 关闭缓冲。所以为了读取文件内容,使用fread()。

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

#include <iostream>
#include <cstdio>

using namespace std;

int main ()
{
    char str[] = "Buffered Stream";
    char buffer[BUFSIZ];
    
    FILE *fp;
    fp=fopen ("test.txt","wb");
    
    setbuf(fp,buffer);
    fwrite(str, sizeof(str), 1, fp);
    
    fflush(fp);
    fclose(fp);

    cout << buffer;
    
    return 0;
}

运行程序时,输出将是:

Buffered Stream

示例 2:setbuf() 关闭缓冲的函数

#include <iostream>
#include <cstdio>

using namespace std;

int main ()
{
    char str[] = "Unbuffered Stream";
    char strFromFile[20];
    
    FILE *fp;
    fp=fopen ("test.txt","wb+");
    
    setbuf(fp,NULL);
    fwrite(str, sizeof(str), 1, fp);
    fflush(fp);
    
    /* We need to rewind the file pointer and read the file because 
    the data from test.txt isn't saved in any buffer */
    rewind(fp);
    fread(strFromFile, sizeof(strFromFile), 1, fp);
    
    fclose(fp);
    
    cout << strFromFile;
    return 0;
}

运行程序时,输出将是:

Unbuffered Stream

相关用法


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