VFS简介和内核操作函数
参考资料:
VFS(Virtual File System,虚拟文件系统)是操作系统内核中的一个重要组成部分,它提供了一个抽象层,用于统一管理不同类型的文件系统和存储设备。VFS 的主要作用包括:
- 统一文件系统接口:VFS 定义了统一的文件系统接口,使得用户空间程序无需关心底层文件系统的具体实现细节,而是通过相同的系统调用来进行文件的读取、写入、打开、关闭等操作。
- 支持多种文件系统:通过 VFS,Linux 内核可以同时支持多种文件系统,如ext4、NTFS、FAT32 等,用户可以在不同文件系统之间自由地进行文件操作而无需修改应用程序代码。
- 提供虚拟文件系统层:VFS 提供了一个虚拟文件系统层,在这个层上对文件系统的访问进行统一管理,从而简化了文件系统的操作和管理。
- 文件系统挂载和管理:VFS 负责管理文件系统的挂载和卸载,使得用户能够通过挂载点访问不同的文件系统,同时确保文件系统的完整性和安全性。
- 提供符号链接和其他特殊文件的支持:VFS 提供了对符号链接、设备文件、管道文件等特殊文件的支持,使得用户能够以统一的方式使用这些特殊文件。
在 Linux 等操作系统中,文件系统比如 ext4、FAT 等都是通过实现 VFS 提供的接口来与内核进行交互的。VFS 提供了一个统一的文件系统访问接口,使得不同类型的文件系统可以通过相同的方式被内核和上层应用程序访问。VFS在操作系统中提供了一个抽象接口,统一了不同类型文件系统的访问方式,使上层应用程序可以以统一的方式访问各种类型的文件系统。
VFS的操作函数:
- vfs_read和 vfs_write:
- ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos):从文件中读取数据。
- ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos):向文件中写入数据。
- vfs_open和 vfs_release:
- int vfs_open(const struct path *path, struct file *file):打开文件。
- int vfs_release(struct inode *inode, struct file *file):释放文件资源。
- vfs_mkdir和 vfs_rmdir:
- int vfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode):创建目录。
- int vfs_rmdir(struct inode *dir, struct dentry *dentry):删除目录。
- vfs_unlink:
- int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode *inode):删除文件或符号链接。
- vfs_stat:
- int vfs_stat(const char *name, struct kstat *stat):获取文件或目录的统计信息。
- vfs_fsync:
- int vfs_fsync(struct file *file, int datasync):将文件数据同步到磁盘。
- vfs_rename:
- int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry):重命名文件或目录。
像内核打开文件的函数file_open实际上调用的就是vfs_open