打开的磁盘文件的FILE结构体及buffer使用的是kernel的地址空间
来源:互联网 发布:cctv1在线直播软件 编辑:程序博客网 时间:2024/05/16 07:21
声明:本人正在研读UNIX环境高级编程,相关博文为学习心得,观点可能会有错误,若那位大神发现错误,请留言指正,不胜感激。
如下代码执行时,内核地址空间(3-4G)和用户地址空间(0-3G)的使用情况分析:
void main()
{
FILE * fp = null ;
fp = fopen("temp.out","rw") ;
. . .
fclose(fp) ;
}
对于standard I/O操作,当某进程调用fopen打开一个存在的磁盘文件,将会创建一个FILE文件结构体,用来描述被打开文件的状态。
同时,由于standard I/O为buffered I/O,因此,需要为其创建一个缓冲区。由于打开文件时,使用了预读机制,因此,打开一个文件
时,已经将文件中的一个数量的字节读到了此缓冲区中。若对此文件进行追加写操作,则追加的字节,首先会缓存到此缓存区中。由
于buffered I/O对于磁盘文件的缓存方式是fully buffered,因此,只有当此缓存区满时,才将缓存区中的字节同步到磁盘文件。
对于上面所说的FILE结构体和缓存区,它们占用的是内核的地址空间(3-4G),而不是调用fopen函数的进程的地址空间。不是使用
进程的heap。对于上述代码,使用到进程地址空间的自有文件指针fp。此变量为自动变量,使用进程的stack空间。
0 0
- 打开的磁盘文件的FILE结构体及buffer使用的是kernel的地址空间
- kernel 中circle buffer的使用
- 寄存器使用结构体进行空间地址的映射
- du: 查询文件或文件夹的磁盘使用空间
- 磁盘文件的打开和关闭
- Sql Server查询磁盘的可用空间,数据库数据文件及日志文件的大小及利用率
- Sql Server查询磁盘的可用空间,数据库数据文件及日志文件的大小及利用率
- kernel的各个地址
- 监控SQL Server的磁盘使用空间
- Winpcap的Kernel Buffer和其他的Buffer设置
- Android打开文件的Intent及使用
- 打开文件的Intent及使用
- Android--打开文件的Intent及使用
- android 打开文件的Intent及使用
- 一个EXT3的文件分区,当使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满
- linux内核地址空间及用户进程的地址空间
- ofn结构及多个文件的打开
- linux1.0的磁盘缓存buffer cache
- perl批量处理文件
- WPF动画
- Linux下C编程:文件拷贝 + Code Blocks/Eclipse CDT体验
- eclipse php插件地址
- 怎样写好技术文档
- 打开的磁盘文件的FILE结构体及buffer使用的是kernel的地址空间
- 一样的Android不一样的学习
- 建图方式之“邻接链表” BFS搜索
- javascript事件参考记录
- GCC与MinGW的简单安装与使用
- 一样的Android,不一样的学习
- Qt 界面使用自定义控件 "提升为"
- 使用CDT在ECLIPSE中创建C++工程
- Mingw GCC 4.3.0 安装与配置(解决CreateProcess问题)