日期:2014-05-16  浏览次数:20693 次

在scull.c中,是怎样找到inode 的
我在看源代码,在open方法前好像没有提到inode,但在open 等方法中要用到这个参数,问这个参数是怎么得到的?谢谢了

------解决方案--------------------
open系统调用和驱动里面的open函数在参数上不是对应的,在内核中还要封装。

运行open调用只要遵守open的参数规则就可以了

定义函数 int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
 
函数说明 参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所能使用的旗标,如
O_RDONLY 以只读方式打开文件
O_WRONLY 以只写方式打开文件
...........
------解决方案--------------------
楼主的问题我可以回答。open是Linux提供的系统调用,程序在执行到open时,会把相应的参数压栈,再执行int 80h,由用户态进入内核态。然后由syscall()这个函数判断是哪个系统调用,并跳到相应的函数入口。进入之后,会根据文件名查找相应的inode,再inode压栈,跳到驱动相应的open函数入口。