yaffs理解第四篇之yaffs_open

对于任何一个文件系统来说,它的最最基本的操作肯定是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
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值