Linux标准I/O的缓冲

1.标准I/O的缓冲有三种类型:

(1)全缓冲:缓冲区被填满后进行I/O操作

(2)行缓冲:输入和输出中遇到换行符,执行I/O操作。

    行缓冲的两个限制: 如果缓冲区被填满,即使没有换行符,也进行I/O操作。

    标准I/O库要求从一个不带缓冲的流,或者一个行缓冲的流(它从内核请求输入数据)得到输入数据,将冲洗所有行缓冲输出流。

(3)无缓冲:不进行缓冲存储

2.关于冲洗(flush):

   从标准I/O的角度,flush是将缓冲区的内容写到磁盘

   从终端驱动程序的角度,flush是丢弃缓冲区中的数据

   函数:int fflush(FILE *fp); 用于强制flush一个流

3.系统默认的缓冲方式:

   标准输入、输出连至终端时,为行缓冲;

   如果将标准输入,输入重定向到普通文件时,变为全缓冲;

   标准错误:不带缓冲

   普通文件:全缓冲

4.改变缓冲类型的函数:

   #include <stdio.h>
   void setbuf(FILE *fp, char *buf ) ;    //如果buf为NULL,关闭缓冲;如果buf指向长度为BUFSIZE的缓冲区,通常该流设置为全                                                                 缓冲,如果该留与一个终端设备相关,某些系统也可将其设置为行缓冲
    int setvbuf(FILE *fp, char *buf, int mode, size_t size) ;

     mode参数说明:_IOFBF 全缓冲
                                _IOLBF 行缓冲
                                _IONBF 不带缓冲,此时忽略buf, size参数

    如果为行缓冲或全缓冲,buf和size用来设置缓冲区及其长度;如果设为带缓冲,而buf为NULL,则系统自动分配缓冲区,长度为BUFSIZE

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值