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