vfs:open.c 源码学习

Posted timer_go

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vfs:open.c 源码学习相关的知识,希望对你有一定的参考价值。

nameidata路径查找辅助结构

open.c

@do_sys_open
    @get_unused_fd_flags
    @do_filp_open
        1.开始填充nameidata
        2.开始填充file
        @path_openat
            1. file = get_empty_filp(); //开始填充file
            2. file->f_flags = op->open_flag; //开始填充file
            3. path_init(dfd, pathname->name, flags | LOOKUP_PARENT, nd, &base); 
               //开始填充初始化nameidata,并且从根查找
                3.1 nd->last_type = LAST_ROOT;
                3.2 nd->flags = flags | LOOKUP_JUMPED;
                3.3 nd->depth = 0;
                3.4 nd->path = nd->root;
                3.5 nd->inode = inode;
            4. link_path_walk(pathname->name, nd);
            5. do_last(nd, &path, file, op, &opened, pathname);
                // 某些条件下会进入:
                5.1 fput(file):  //释放file
                5.2 dput(path->dentry);  // 释放dentry
@get_unused_fd: 得到一个可用的文件描述符;通过该函数,可知文件描述符实质是进程打开文件列表中对应某个文件对象的索引值;
@do_filp_open: do_filp_open()打开文件,返回一个file对象,代表由该进程打开的一个文件;进程通过这样的一个数据结构对物理文件进行读写操作。
@path_openat:返回一个file对象,@do_filp_open 直接把活扔给@path_openat. filp = path_openat(dfd, pathname, &nd, op, flags | LOOKUP_RCU)

以上是关于vfs:open.c 源码学习的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

C# 获得目录创建时间的源码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段