參考資料:
https://blog.csdn.net/weixin_45264425/article/details/128233119
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