當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。