yaffs理解第四篇之yaffs_open
来源:互联网 发布:unity3d 碰撞墙壁 编辑:程序博客网 时间:2024/06/16 06:23
对于任何一个文件系统来说,它的最最基本的操作肯定是open, read, write, close.今天我们先从open入手来解剖yaffs是如果来完成这些最基本的操作的。在开始读代码之前先介绍一下yaffs文件系统在操作文件经常会调用到两个函数,yaffsfs_GetHandle和yaffsfs_GetHandlePointer。yaffs文件系统定义了一个全局的结构体数组,yaffsfs_handle[yaffs_N_HANDLES],也就是存放文件描述符的数组,因此创建一个文件就是要从这个数组中获得一个空闲的成员,而yaffsfs_GetHandle就是获得这个成员(文件描述符)的数组标号,yaffsfs_GetHandlePointer就是这个成员(文件描述符)的地址。1.综上所述,在open一个文件的时候,首先会通过yaffsfs_GetHandle获得一个文件描述符,当然在实际的对这个描述符的操作会通过yaffsfs_GetHandlePointer获得这个文件描述符的地址来进行操作。2.一旦建立好文件描述符,yaffs会通过传进来的path参数来辨别这个文件是已经存在还是需要建立的,即通过函数obj = yaffsfs_FindObject(NULL,path,0);a)如果这个obj已经存在,yaffs会通过一个循环来检测这个文件是否被打开,是否被使用。for(i = 0; i <= YAFFSFS_N_HANDLES; i++){//这条if语句的意思是,如果有一个另外的文件描述符,它在使用,而且它的obj对应我们现在使用的obj,就认为这个obj已经被打开了。if(i != handle && yaffsfs_handle[i].inUse && obj == yaffsfs_handle[i].obj){alreadyOpen = 1;if(yaffsfs_handle[i].exclusive){alreadyExclusive = 1;}}}yaffs会根据open后面跟的标志位参数的不同进行处理。比如标志位定义了O_EXCL就代表是独占,此时认为文件是一个临界资源,如果被其他的应用程序打开了,这次就不能被打开。除了open的标志位限制,还跟这个obj本身的属性有关,yaffs也会根据obj->yst_mode进行比较处理。b)如果这个obj不存在,看标志位是否是O_CREAT,如果是创建文件。3. 如果文件已有了(不管是通过查找找到以前的,还是新建立的),并且允许打开,则给文件描述符结构体进行赋值。否则的话讲这个文件描述符置空,归还给yaffsfs_handle[yaffs_N_HANDLES],保证下次使用。4. 返回文件描述符。
- yaffs理解第四篇之yaffs_open
- yaffs打开文件yaffs_open
- yaffs理解第三篇之yaffs_mount
- yaffs理解第二篇——yaffs_startup函数解析
- yaffs理解第一篇——yaffs direct综述
- 彻底理解指针第四篇
- yaffs基础第二篇——yaffs中缓冲机制
- 移植内核之支持Yaffs文件系统
- linux 文件系统构建之初步了解yaffs
- 第四篇:指针的强化理解
- 读书笔记之《深入理解Linux内核》第四、五、六章
- <<UNIX环境高级编程>>之第四章理解
- 转一份关于理解yaffs文件系统很好的资料
- mysql之路第四篇
- u-boot-2016.01之支持yaffs以及制作补丁
- 深入理解AJAX系列第四篇--跨域问题
- Android入门第四篇之TableLayout (一)
- Android入门第四篇之TableLayout (一)
- 使用VC2003项目修改版本号和版权信息出错的解决方法
- Java编程那些事儿93——多线程基础
- 电子商务安全--加密标准
- PHP str_replace() 函数实例教程
- 全面解析Java中的String数据类型
- yaffs理解第四篇之yaffs_open
- Flex Builder 2: Installed Adobe Flash Player is Not a Debugger 官方的解决方案
- java import的机制
- 初学AjaxPro
- CString,int,string,char*之间的转换
- .net 身份验证
- 谈谈Windows程序中的字符编码
- 学习struts的好网站
- 五个基于Google Earth的小游戏