📜  C++ setbuf()

📅  最后修改于: 2020-09-25 08:34:16             🧑  作者: Mango

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

setbuf()原型

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

如果缓冲区不为null,则等效于调用setvbuf(stream,buffer,_IOFBF,BUFSIZ)。

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

它在头文件中定义。

setbuf()参数

setbuf()返回值

没有

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

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

示例1:setbuf() 函数的工作方式

#include 
#include 

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 
#include 

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