open的實現過程

2021-10-14 12:31:27 字數 1735 閱讀 5614

/* 初看起來,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裝置名 裝置型別 主裝置號 次裝置號 當我們使用上述命令,建立了乙個字元裝置檔案時,...