c语言buffer参数,C语言-Stream buffering 操作 (setbuf,setbuffer,setlinebuf,setvbuf)

接口:

#include

void setbuf(FILE *stream, char *buf);

void setbuffer(FILE *stream, char *buf, size_t size);

void setlinebuf(FILE *stream)

int setvbuf(FILE *stream, char *buf, int mode, size_t size);

描述:

系统中有三种可用的buffer类型,分别为无Buffer(Unbuffered),块Buffer(Block Bufferd)和行Buffer(Line Buffered)。当一个流是Unbufferd的时候,往这个Stream中写入的信息会立刻写入目标文件。当Buffer类型是Block Buffered时,往该Stream中写入的信息会先暂存在Buffer中,每次实际的写入都是以块(Block)大小为单位写入目标文件。而当Buffer类型是Line Buffered时,往该Stream中输入的信息都会先暂存在Buffer中直到遇到新的一行,或是从一个终端设备读入例如stdin。fflush()可以强制将Buffer提前清空。

通常所有的文件和设备都是Block Buffered,如果任何一个流涉及到终端(例如stdin)那它将是Line Buffer类型。而标准错误流stderr的默认Buffer类型永远是Unbuffered类型。

setvbuf()函数或许可以使用在任何打开的Stream中用于改变它的Buffer类型。该函数的参数mode可以是一下三个宏(macros)之一:

_IONBF Unbuffered

_IOLBF Line Buffered

_IOFBF Fully Buffered

除了将mode设置成_IONBF,参数buf应当指定一个长度不小于size Byte的buffer。这个指定的buffer将用来代替当前的buffer。如果将buf设为NULL只有将mode设为_IONBF才有效。一个新的buffer应当在下一次读写操作之前分配好。setvbuf()函数可能只有在打开一个stream之后,在所有操作之前有效。

其他的三个函数与setvbuf()都比较相似,setbuf()函数实际上等价于下面的调用:

setvbuf(stream, buf, buf?_IOFBF:_IONBF,BUFSIZ);

serbuffer()函数也是一样,除了buffer的长度size是由参数传入的而不是使用默认的BUFSIZ。setlinebuf()实际上则等价于下面的调用:

setvbuf(stream, NULL, _IOLBF, 0);

setvbuf()函数返回0表示成功,非0值表示失败(mode是无效的或是请求不能被实现)。如果失败该函数将设置errno值。除了这个函数,其他的三个函数不返回任何值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值