深入了解Linux内核中文件系统之open函数(上)

如题所述

0、前言

深入探讨Linux内核中的open函数,了解其在用户层的定义、参数解析以及内核源码分析。

1、open函数在用户层的定义

查阅Linux Programmer's Manual,open函数有两种定义形式:一个版本需要两个参数,另一个版本需要三个参数。该函数执行文件打开操作,若文件不存在,依据flag是否指定了O_CREAT参数决定是否创建文件。返回值为integer,小于零表示失败,大于零表示打开文件的文件描述符。

参数解析

参数包括:pathname(路径名,可为绝对或相对路径),flags(打开标志,O_RDONLY、O_WRONLY、O_RDWR互斥),mode(访问权限,仅在flags为O_CREAT时适用)。

2、open函数在内核的源码分析

open函数定义于fs/open.c源文件中。从sys_open()函数开始,这是do_sys_open()的封装函数。AT_FDCWD指示文件查找位置。do_sys_open函数完成文件名转换、获取未用文件描述符、调用do_filp_open函数执行打开过程、绑定文件描述符与文件。

源码分析

2.1 open系统调用入口

sys_open()函数通过do_sys_open()实现,该函数包含文件名、路径查找逻辑,转换过程将用户态字符串复制至内核态。

2.2 do_sys_open函数

完成文件名转换、获取未使用fd、调用do_filp_open执行打开过程、绑定文件描述符与文件,最后释放文件名并返回文件描述符。

2.3 get_unused_fd_flags获取未用fd

函数定义于fs/file.c源文件中,实现获取未使用fd的逻辑。

2.4 do_filp_open函数

用于打开文件,返回file对象,执行set_nameidata和path_openat函数,实现路径解析与文件打开。

未续待完

嵌入式物联网学习资源丰富多样,选择正确的学习路径至关重要。分享一大份包含学习资料、面试经验与项目实践的资源包,容量约150GB,内容更新、全面。

参考来源:深入了解Linux内核中文件系统之open函数(上),原文链接:深入了解Linux内核中文件系统之open函数(上)
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜