1.VFS介绍
在跟踪流程open流程之前我们首先了解一下VFS,Linux 内核中的 VFS(Virtual File System)是一个抽象层,它隐藏了基础文件系统(如 ext4、NTFS 等)的实现细节,并提供一个统一的文件系统接口给用户空间和内核使用。VFS 可以让应用程序在使用不同的底层文件系统时不必了解底层文件系统的细节,这样可以方便用户使用并提高文件系统的灵活性、可扩展性。
VFS 在内核中的位置是 fs/vfs 目录,它包含了各种文件系统操作的定义和实现,例如文件创建、文件打开、读写文件等。VFS 定义了一系列文件相关的结构体,如文件描述符(file descriptor)、超级块(superblock)、索引节点(inode)等,这些结构体描述了一个文件在内核中的属性和状态,并提供了相应的操作函数。这些操作函数在不同的底层文件系统中都具有类似的功能,但底层实现可能会不同。
VFS 也提供了一些虚拟文件系统,比如 tmpfs、proc、sysfs 等,它们在内存中创建了一个文件系统,并提供了一些虚拟文件和目录,用于映射内核状态或特定设备的信息。
总的来说,VFS 是一个非常重要的组件,在 Linux 内核中起到了连接用户空间和底层文件系统的桥梁作用。
2.open系统调用定义
open系统调用定义在内核源码目录fs/open.c里面
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
if (force_o_largefile())
flags |= O_LARGEFILE;
ret