标准IO缓存机制
来源:互联网 发布:javascript dom pdf 编辑:程序博客网 时间:2024/06/07 17:13
标准IO库的操作是围绕流进行的,当我们通过fopen标准IO库函数打开一个文件,我们就使一个文件和一个IO流相关联。在这里我们把IO流和文件指针FILE*等同起来,因为所有针对IO流的操作都是通过FILE*指针完成的。
我们知道引入标准IO库的目的是为了提高IO的效率,避免频繁的进行read/write系统调用,系统调用会消耗较多的资源。因为标准IO引入了IO缓存,通过积累一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从而提高IO效率。标准IO库会自动管理内部的缓存,不需要程序员的介入。然而,也正是因为看不到标准IO库的缓存,有时候会给我们带来一定的迷惑性。这里介绍标准IO库的缓存策略。
1)当STDOUT连接到终端设备时,那么它是行缓存的,也就是标准IO库没有看到一个新的换行符\n时就刷新一次缓存(即执行一次实际的输出操作)。如下代码可以实现:
int main()
{
printf("This Line Should be Cached...");
sleep(3); //这时候在终端上是看不到任何输出
printf("/nThis Line Should be Cached Again"); //这时候可以看到第一个printf的输出,因为被换行符刷新了
sleep(3); //这时候也只能看到一行输出,而看不到第二个printf输出的
printf("This Line Should Not be Cached Again/n"); //这时候可以看到第二个和第三个printf的输出,因为被结尾的/n刷新
sleep(3);
getchar();
}
2)当STDOUT被重定向到一个具体文件时,那么标准输出是全缓存的,也就是说只有当输出缓存被塞满或者调用fflush或fclose是才会实际的写入操作,这里就不给出具体例子,可以通过freopen将STDOUT重定向到一个具体文件来进行测试。
3)标准出错STDERR:为了尽快的看到出错信息,标准出错是不带任何缓存的。
我们知道引入标准IO库的目的是为了提高IO的效率,避免频繁的进行read/write系统调用,系统调用会消耗较多的资源。因为标准IO引入了IO缓存,通过积累一定量的IO数据后,然后集中写入到实际的文件中来减少系统调用,从而提高IO效率。标准IO库会自动管理内部的缓存,不需要程序员的介入。然而,也正是因为看不到标准IO库的缓存,有时候会给我们带来一定的迷惑性。这里介绍标准IO库的缓存策略。
1)当STDOUT连接到终端设备时,那么它是行缓存的,也就是标准IO库没有看到一个新的换行符\n时就刷新一次缓存(即执行一次实际的输出操作)。如下代码可以实现:
int main()
{
printf("This Line Should be Cached...");
sleep(3); //这时候在终端上是看不到任何输出
printf("/nThis Line Should be Cached Again"); //这时候可以看到第一个printf的输出,因为被换行符刷新了
sleep(3); //这时候也只能看到一行输出,而看不到第二个printf输出的
printf("This Line Should Not be Cached Again/n"); //这时候可以看到第二个和第三个printf的输出,因为被结尾的/n刷新
sleep(3);
getchar();
}
2)当STDOUT被重定向到一个具体文件时,那么标准输出是全缓存的,也就是说只有当输出缓存被塞满或者调用fflush或fclose是才会实际的写入操作,这里就不给出具体例子,可以通过freopen将STDOUT重定向到一个具体文件来进行测试。
3)标准出错STDERR:为了尽快的看到出错信息,标准出错是不带任何缓存的。
- 标准IO缓存机制
- 标准IO缓存
- NFS缓存IO机制
- 5 标准IO的缓存
- 深究标准IO的缓存
- 深究标准IO的缓存
- Linux标准IO库缓存策略介绍
- Linux标准IO库缓存策略介绍
- C标准IO缓存长度限制0124
- 标准IO和不带缓存的IO
- 标准IO和不带缓存的IO
- linux 标准IO缓冲机制探究
- linux 标准IO缓冲机制探究
- linux 标准IO缓冲机制探究
- linux 标准IO缓冲机制探究
- linux 标准IO缓冲机制探究
- linux 标准i/o缓存机制
- 文件IO(不带缓存)与标准IO(带缓存流IO)的小结
- bash: ifconfig: command not found 解决办法
- 推荐免费下载大型酒店管理系统源码
- JfreeChart使用经验总结
- 笑话 假如美国和中国打仗了 父子间对话
- c#在多线程中如何调用Winform
- 标准IO缓存机制
- EM_GETOLEINTERFACE
- Freemarke的内置函数
- 利用预渲染加速iOS设备的图像显示
- 写在前面的...
- openfire数据库模式指南
- 【SQL Server学习笔记】INSERT、UPDATE 语句
- java网页抓取问题
- python 学习记录(3)—文件操作