Files

struct file_operations 與 struct vnodeops

  • June 24, 2020

據我了解核心維護4個表。

  1. 每個程序的 FD 表。
  2. 系統全開文件表struct file
  3. Inode(記憶體中)表struct vnode
  4. Inode(磁碟上)表。

struct file有一個名為的欄位struct file_operations f_ops;,其中包含特定於 FS 的操作,例如ext2_read()ext2_write();

struct vnode也有一個struct vnodeops v_op;包含 FS 特定操作的欄位。

我的問題是為什麼我們在兩者內部都有相似的功能?還是我有什麼問題?Unix 和 Linux 有什麼不同嗎?因為我沒有找到struct vnodeLinux裡面的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、重命名等操作的欄位.

引用自:https://unix.stackexchange.com/questions/584340