linux学习笔记[华电](8)——标准IO库

标准IO库

这一章的重点是缓存的策略。


标准IO库 vs 系统调用

标准IO库系统调用
流,FILE *文件描述符
stdinSTDIN_FILENO
有缓存无缓存
可移植性好用于特定的系统

缓存

1、缓存策略:

  • 全缓存普通文件,缓冲区满才与磁盘同步,fflush强制写入
  • 行缓存stdin,stdout,遇上换行符才与磁盘同步;
    一个简单的例子,可以体现出行缓存
// 10s后一块输出
#include<stdio.h>
int main()
{
        for(int i=0;i<10;i++)
        {
                printf("%d",i); //所有都缓存,一块输出
                sleep(1);
        }
        return 0;
}
// 1s输出一个
#include<stdio.h>
int main()
{
        for(int i=0;i<10;i++)
        {
                printf("%d\n",i); //行缓存
                sleep(1);
        }
        return 0;
}
  • 无缓存stderr,读写操作总是与终端同步;
    大量输出程序速度会非常慢
// 1s输出一个
#include<stdio.h>
int main()
{
        for(int i=0;i<10;i++)
        {
                fprintf(stderr,"%d",i); //无缓存
                sleep(1);
        }
        return 0;
}

2、修改缓存策略:

库函数功能
setbuf设置缓存的大小
setbuffer设置大小或无缓存
setlinebuf设置为行缓存
setvbuf以上所有功能

3、标准输出重定向:fileno获取FILE *的整数标识符,dup2逐个打开和交换
4、打开与关闭文件:fopenfclose
5、读写单个字符…
6、读/写一行…
7、格式化输入输出

  • printf:stdout
  • fprintf:可重定向
  • sprintf:生成格式化字符串结果
  • scanf
  • fscanf
  • sscanf:从字符串中解析各个字段,读取日志文件

8、二进制读/写
9、文件中定位
不建议系统调用和标准库函数混合使用,原因是:缓存。


总结

这一期就是这些内容了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值