系统缓冲区、内核缓冲区、IO库操作本身的缓冲区 之间联系
2016-03-26 13:31
323 查看
FILE结构里本身带有一个缓冲。而系统在操作IO的时候可能会还有一个缓冲。
fflush函数单纯是调用系统地写操作(比如WriteFile)把FILE结构里的那个缓冲的数据传给系统,这个时候很可能仅仅是写到系统的缓冲区里了。
fsync函数是调用系统的flush函数(FlushFileBuffers),清空系统的写入缓冲区。
C是独立于系统存在的,所以它只能假设系统本身没有缓冲区(比如DOS就没有读取文件的缓冲区)。
于是C库就自己又加了一层缓冲区。同时为了保证能正常处理低一层的缓冲,又增加了一个fsync函数。
你只需要考虑本层级的和下一个层级的缓冲区就行了。再往下你想管也管不了,事实上最下一层是硬盘上的缓冲区。
备注:
缓冲区其实就是计算机存储器中的的一块临时存储空间,如我们编程时自己定义一块缓冲区一样。
其实只要在速度之间有差异的地方都可以使用缓冲区。
fflush函数单纯是调用系统地写操作(比如WriteFile)把FILE结构里的那个缓冲的数据传给系统,这个时候很可能仅仅是写到系统的缓冲区里了。
fsync函数是调用系统的flush函数(FlushFileBuffers),清空系统的写入缓冲区。
C是独立于系统存在的,所以它只能假设系统本身没有缓冲区(比如DOS就没有读取文件的缓冲区)。
于是C库就自己又加了一层缓冲区。同时为了保证能正常处理低一层的缓冲,又增加了一个fsync函数。
你只需要考虑本层级的和下一个层级的缓冲区就行了。再往下你想管也管不了,事实上最下一层是硬盘上的缓冲区。
备注:
缓冲区其实就是计算机存储器中的的一块临时存储空间,如我们编程时自己定义一块缓冲区一样。
其实只要在速度之间有差异的地方都可以使用缓冲区。
相关文章推荐
- 如何在 Git 里撤销(几乎)任何操作
- 113. Path Sum II
- java代理、cglib、java proxy
- 推荐一个C#调用winapi的帮助网站
- Java设计模式之“抽象工厂模式“
- Xilinx SRIO ID
- PAT (Advanced Level) Practise 1101 Quick Sort (25)
- objective-c C类型数组
- [Android]Intent的使用
- 字符串全排列
- HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
- Fragment实现底部栏
- Java包名命名规则(转载)
- 教育技术菅若琳
- 《C++计时器》
- 互动投影系统
- 16年腾讯笔试模拟题
- 链表中环的入口结点
- [C#]第30位数字是多少
- CentOS 6.5 升级内核 kernel