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++ set rbegin()用法及代碼示例
- C++ set upper_bound()用法及代碼示例
- C++ set crbegin用法及代碼示例
- C++ set size用法及代碼示例
- C++ set emplace用法及代碼示例
- C++ set swap()用法及代碼示例
- C++ set::rbegin()、set::rend()用法及代碼示例
- C++ set size()用法及代碼示例
- C++ set lower_bound()用法及代碼示例
- C++ set begin用法及代碼示例
- C++ set::begin()、set::end()用法及代碼示例
- C++ set end用法及代碼示例
- C++ set erase()用法及代碼示例
- C++ set find()用法及代碼示例
- C++ set end()用法及代碼示例
- C++ set cbegin()用法及代碼示例
- C++ set key_comp()用法及代碼示例
- C++ set equal_range()用法及代碼示例
- C++ set emplace_hint用法及代碼示例
- C++ set key_comp用法及代碼示例
注:本文由純淨天空篩選整理自 C++ setvbuf()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。