关于标准IO流的一些认识
来源:互联网 发布:蒙古天骄吧 知乎 编辑:程序博客网 时间:2024/05/03 19:46
C语言库中有一个FILE的结构体,当我们打开一个文件的时候,会用到FILE*类型的指针来操作fopen所返回的一个指针,这个指针就是流。
流是操作系统管理IO的一个引入的概念,一个流是与一个描述符绑定在一起的。所以也可以根据流来得到一个描述符。
标准IO库有三种类型的缓冲:1、全缓冲2、行缓冲3、无缓冲。全缓冲是指,当一个操作一个流的时候,如果打算往流里写进去一些信息,那么如果这是全缓冲的流,它会先把信息写在它的缓冲里面,直到信息结束满或者缓冲区空间已满的时候,才会触发IO写操作。
例如,当我们需要往一个stdout标准输出写入一些信息的时候,那么全缓冲的stdout会把你想写的信息先缓存在它的缓冲区里面,这样的话,只有等你把要写的信息写完整了、或缓冲区空间不够用了的情况下,操作系统才会为我们执行真正的IO写操作。也就是才会把信息给写到输出,而并不是你写一个字符的信息,操作系统就帮我们执行一个IO的写操作,这样的话明显浪费资源。反之,stdin也是一样。
接着是一个行缓冲,跟全缓冲差不多的概念,但是这个行缓冲会在stdout遇到一个'/n'即回车符号的时候,就执行写操作。
无缓冲,stdout收到一个字符写一个字符,不过实际上很少情况下会真正这样做,因为还受到一个硬件的限制,有的硬件会有缓存的操作,这个是程序级别难以控制的。
fgets这个函数每次只能获得一行的信息。而一般在交互的设备中,stdin跟stdout默认是全缓冲的。stderr是无缓冲的流、
- 关于标准IO流的一些认识
- 关于winpcap的一些认识
- 关于AOP的一些认识
- 关于winpcap的一些认识
- 关于BIRT的一些认识
- 关于ARM的一些认识
- 关于random的一些认识
- 关于纹理的一些认识
- 关于tokyo的一些认识
- 关于索引的一些认识
- 关于Layer的一些认识
- 关于面试的一些认识
- 关于CCDirector的一些认识
- 关于接口的一些认识
- 关于CGI的一些认识
- 关于ThreadLocal的一些认识
- 关于堆栈的一些认识
- 关于GCD的一些认识
- 第五章 黎明踏浪号 Facebook (二)
- Android内核的简单分析
- 监听程序当前无法识别连接描述符中请求的服务
- QML之表盘
- 第五章 黎明踏浪号 Facebook (一)
- 关于标准IO流的一些认识
- 第四章 击鼓传花 MySpace (二)
- Android游戏框架Libgdx使用入门
- J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(二)
- 如何阅读源代码
- 第四章 击鼓传花 MySpace (一)
- 第三章 硅谷宠儿 Friendster (二)
- 第三章 硅谷宠儿 Friendster (一)
- C/C++获取高精度时间