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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。