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、文件中定位
不建议系统调用和标准库函数混合使用,原因是:缓存。


总结

这一期就是这些内容了。


版权声明:本文为weixin_41650348原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。