/* 初看起來,fdtable和files_struct之間某些資訊似乎是重複的,其實fdtable中的成員
都是指標,初始時都指向了後者的對應成員, 當需要開啟的檔案超過了nr_open_default時
,核心會分配乙個fd_set的例項, 替換最初的embedded_fd_set*/
struct fdtable ;
struct file f_u;
/* 封裝了:
1. 檔名和inode之間的關聯
2. 檔案所在檔案系統的資訊
後面**給出了詳細結構*/
struct path f_path;
#define f_dentry f_path.dentry
#define f_vfsmnt f_path.mnt
/* 檔案操作 */
const struct file_operations *f_op;
atomic_t f_count;
/* open系統呼叫傳遞的額外標誌 */
unsigned int f_flags;
mode_t f_mode;
/* 檔案位置當前值 */
loff_t f_pos;
/* 處理該檔案的程序有關的資訊 */
struct fown_struct f_owner;
unsigned int f_uid, f_gid;
/* 預讀特徵,指定是否預讀,如何預讀*/
struct file_ra_state f_ra;
/* 用於檔案系統檢查乙個file例項是否仍然與相關的inode內容相容,
這對於確保已快取物件的一致性很重要 */
u64 f_version;
#ifdef config_security
void *f_security;
#endif
/* needed for tty driver, and maybe others */
void *private_data;
#ifdef config_epoll
/* used by fs/eventpoll.c to link all the hooks to this file */
struct list_head f_ep_links;
spinlock_t f_ep_lock;
#endif /* #ifdef config_epoll */
};struct path ;
struct fs_struct ;
#+downloaded: screenshot @ 2020-11-18 16:12:04
open 系統呼叫的實現
open系統呼叫的服務例程是sys open 函式,它接受三個引數 要開啟檔案的路徑名filename,訪問模式的表示flags和檔案許可權掩碼mode。在核心中,sys open實際呼叫do sys open函式來完成所有操作。do sys open主要執行如下操作 1,通過getname 從程序...
open 系統呼叫的實現
open系統呼叫的服務例程是sys open 函式,它接受三個引數 要開啟檔案的路徑名filename,訪問模式的表示flags和檔案許可權掩碼mode。在核心中,sys open實際呼叫do sys open函式來完成所有操作。do sys open主要執行如下操作 1,通過getname 從程序...
字元裝置驅動Open呼叫過程
使用open函式開啟裝置檔案,到底做了些什麼工作?下圖中列出了open函式執行的大致過程。裝置檔案通常在開機啟動時自動建立的,不過,我們仍然可以使用命令mknod來建立乙個新的裝置檔案,命令的基本語法如下 mknod裝置名 裝置型別 主裝置號 次裝置號 當我們使用上述命令,建立了乙個字元裝置檔案時,...