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