修真四万年校对版txttxt百度网盘!

2654人阅读
Linux(19)
Linux-2.6 文件打开过程涉及数据结构分析:
原文链接 : http://blog.csdn.net/ordeder/article/details/
文件打开的结构为:
fd = open(path,flag,mode)
open函数内陷到内核空间后,做了以下操作:
1. 找一个空闲的fd
进程打开一个文件,需要消耗该进程的一个文件描述符fd,该fd是用来唯一标示打开的文件,也成为文件号。通过函数get_unused_fd_flags从根据fdtable返回一个空闲的fd,fd对应的task_struct-&files[fd]空闲的。如果进程当前使用的fd个数超过了进程可以打开最大文件数的限制,则内核将返回错误,回到用户空间,否则进入第2步骤。
2. path walk
系统根据path,遍历路径。linux中一切皆文件,包括目录同样被视为文件。每个文件都有一个入口结构来标示dentry{},如果dentry记录的为目录文件,那么dentry-&d_inode描述的是当前目录下的子目录的存储信息,反之,如果dentry记录的为文件,那么dentry-&d_inode记录了文件相关的存储信息。linux中有个path_walk,会根据参数path中的字段和dentry-&d_name进行目录的查找和遍历,path-&dentry-&d_inode找子目录信息,循环遍历,直到找到目标文件的dentry。目标文件的inode即为dentry-&d_inode所指向的节点。
3. 构建打开文件的描述结构 file{}
&& 当找到目标文件的i节点后,对新建的file结构进行初始化,如图蓝色箭头所示,
&& file-&f_path = *
&& & file-&f_inode = path-&dentry-&d_
&& & file-&f_mapping = path-&dentry-&d_inode-&i_
&& & file-&f_mode =
&& & file-&f_op =
4. 构建fd和file的关系
&& 将file地址记录于task_struct-&files-&fd_array[fd] = &file
&& 进程打开一个文件后,内核为其构建了file{}结构,用于描述文件的读写mode、flag、当前读写位置f_pos以及文件操作的接口f_op等。而进程是通过task_struct-&files-&fd_array[]纪录所有打开的文件,每个打开的文件通过数组的下标进行唯一标示,这个下标即为我们open函数的返回值fd(int类型)
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:174380次
积分:2055
积分:2055
排名:第17287名
原创:55篇
评论:42条
Email: slp195(
(1)(1)(3)(1)(2)(1)(1)(1)(1)(5)(4)(10)(2)(5)(4)(5)(1)(9)
本博文采用进行许可。君,已阅读到文档的结尾了呢~~
数据结构文件
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数据结构文件
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 修真四万年txt 的文章

 

随机推荐