Files
struct file_operations 與 struct vnodeops
據我了解核心維護4個表。
- 每個程序的 FD 表。
- 系統全開文件表
struct file
- Inode(記憶體中)表
struct vnode
- Inode(磁碟上)表。
struct file
有一個名為的欄位struct file_operations f_ops;
,其中包含特定於 FS 的操作,例如ext2_read()
,ext2_write();
struct vnode
也有一個struct vnodeops v_op;
包含 FS 特定操作的欄位。我的問題是為什麼我們在兩者內部都有相似的功能?還是我有什麼問題?Unix 和 Linux 有什麼不同嗎?因為我沒有找到
struct vnode
Linux裡面的fs.h參考:https ://www.usna.edu/Users/cs/wcbrown/courses/IC221/classes/L09/Class.html
圖表(來自“Unix internals new frontiers”一書)
好的,我找到了答案。
在像 SVR4 這樣的 Unix 早期版本中,
struct file
不包含file_operations
欄位和所有操作,例如 . 包含的讀、寫等vnode->v_op
。但是,在 Linux 的情況下,
struct file
將包含file_operations
具有打開、讀取、寫入等功能的欄位,並且struct inode
(類似於 vnode)將包含inode_operations
具有查找、連結、取消連結、符號連結、rmdir、mkdir、重命名等操作的欄位.