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


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