Welcome 微信登录

首页 / 操作系统 / Linux / Linux标准IO库缓存策略介绍

    标准IO库操作是围绕着流来进行的,当我们通过fopen标准IO库函数打开一个文件,我们就使一个文件和一个IO流相关联。在这里我们把IO流和文件指针FILE*等同起来,因为所有针对IO流的操作都是通过FILE*指针来实现的。    我们知道引入标准IO库的目的是为了提高IO的效率,避免频繁的进行read/write系统调用,而系统调用会消耗较多的资源。因此标准IO库引入了IO缓存,通过累积一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从而提高IO效率。标准IO库会自动管理内部的缓存,不需要程序员介入。然而,也正是因为我们看不到标准IO库的缓存,有时候会给我们带来一定的迷惑性。这里介绍下标准IO库的缓存策略。    一。标准I/O的缓存--标准输出为例:(这里都是指缺省情况下)    1)当STDOUT连接到终端设备时,那么它就是行缓存的,也就是标准IO库没看到一个新行符 时就刷新一次缓存(即执行一次实际的输出操作)。这一特性可以通过如下测试代码来验证   int main()
  {
      printf("This Line Should be Cached...");
      sleep(3);    //这时候在终端上是看不到任何输出
      printf(" This Line Should be Cached Again");  //这时候可以看到第一个printf的输出,因为被换行符刷新了
      sleep(3);  //这时候也只能看到一行输出,而看不到第二个printf输出的
      printf("This Line Should Not be Cached Again "); //这时候可以看到第二个和第三个printf的输出,因为被结尾的 刷新
      sleep(3);
      getchar();
  }  2)当STDOUT被重定向到一个具体文件时,那么标准输出是全缓存的,也就是说只有当输出缓存被塞满或者调用fflush或fclose时才会执行实际的写入操作,这里就不给出具体例子,可以通过freopen将STDOUT重定向到一个具体文件来进行测试。   二。标准出错STDERR:为了尽快的看到出错信息,标准出错是不带任何缓存的VMware虚拟机中Ubuntu 11.04系统开启ssh服务的方法RedHat Linux 下如何查看设备IRQ,IO,DMA相关资讯      Linux教程 
  • Linux教程:如何在命令行中查看目  (07/28/2014 12:22:23)
  • Linux 修改root密码  (11/03/2012 07:53:38)
  • su - root 与su root的区别  (06/06/2012 00:39:40)
  • Linux进程间通信:消息队列  (01/28/2013 09:43:00)
  • U盘安装Linux开机无法启动解决方法  (10/07/2012 08:55:52)
  • Windows 7/Linux 同步时间  (05/15/2012 06:17:55)
本文评论 查看全部评论 (0)
表情: 姓名: 字数