Linux Struct file 結構體詳解

2021-07-27 15:49:00 字數 2175 閱讀 2946

二、struct path             f_path;

被定義在linux/include/linux/namei.h中,其原型為:

struct path ;

在早些版本的核心中並沒有此結構,而是直接將path的兩個資料成員作為struct file的資料成員,

struct vfsmount *mnt的作用是指出該檔案的已安裝的檔案系統,

struct dentry *dentry是與檔案相關的目錄項物件。

三、const struct file_operations    *f_op;

被定義在linux/include/linux/fs.h中,其中包含著與檔案關聯的操作,如:

loff_t (*llseek) (struct file *, loff_t, int);

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);

等。當開啟乙個檔案時,核心就建立乙個與該檔案相關聯的struct file結構,其中的*f_op就指向的是

具 體對該檔案進行操作的函式。例如使用者呼叫系統呼叫read來讀取該檔案的內容時,那麼系統呼叫read最終會陷入核心呼叫sys_read函式,而 sys_read最終會調用於該檔案關聯的struct file結構中的f_op->read函式對檔案內容進行讀取。

四、atomic_t                f_count;

atomic_t被定義為:

typedef struct atomic_t;

volatile修飾字段告訴gcc不要對該型別的資料做優化處理,對它的訪問都是對記憶體的訪問,而不是對暫存器的訪問。

本質是int型別,之所以這樣寫是讓編譯器對基於該型別變數的操作進行嚴格的型別檢查。此處f_count的作用是記錄對檔案物件的引用計數,也即當前有多少個程序在使用該檔案。

五、unsigned int            f_flags;

當開啟檔案時指定的標誌,對應系統呼叫open的int flags引數。驅動程式為了支援非阻塞型操作需要檢查這個標誌。

六、mode_t                  f_mode;

對檔案的讀寫模式,對應系統呼叫open的mod_t mode引數。如果驅動程式需要這個值,可以直接讀取這個字段。

mod_t被定義為:

typedef unsigned int __kernel_mode_t;

typedef __kernel_mode_t         mode_t;

七、loff_t                  f_pos;

當前的檔案指標位置,即檔案的讀寫位置。

loff_t被定義為:

typedef long long       __kernel_loff_t;

typedef __kernel_loff_t         loff_t;

八、struct fown_struct      f_owner;

struct fown_struct在linux/include/linux/fs.h被定義,原型為:

struct fown_struct ;

該結構的作用是通過訊號進行i/o時間通知的資料。

九、unsigned int            f_uid, f_gid;

標識檔案的所有者id,所有者所在組的id.

十、struct file_ra_state    f_ra;

struct file_ra_state結構被定義在/linux/include/linux/fs.h中,原型為:

struct file_ra_state ;

檔案預讀狀態,檔案預讀演算法使用的主要資料結構,當開啟乙個檔案時,f_ra中出了perv_page(預設為-1)和ra_apges(對該檔案允許的最大預讀量)這兩個欄位外,其他的所有西端都置為0。

十一、unsigned long           f_version;

記錄檔案的版本號,每次使用後都自動遞增。

十二、#ifdef config_security

void                    *f_security;

0 給主人留下些什麼吧!~~

結構體型別 結構體變數 結構體陣列 結構體指標

問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...

結構體 結構體陣列

void test 函式遞迴呼叫 允許函式體裡再次呼叫函式本身 使用遞迴一定要有出口 long fact int n return n fact n 1 定義乙個新的資料型別 struct mypoint 結構體型別所占用的記憶體空間是最大資料型別的整數倍。因為結構體型別的變數在分配記憶體時有記憶體...

結構體 結構體陣列

struct 結構體型別名 型別名 成員名 型別名 成員名 先宣告結構體型別,再定義結構體變數名 宣告結構體型別,不分配空間 定義結構體型別變數,就要分配記憶體空間 作 者 hh 完成日期 2018年8月15日 版本號 v1.0 問題描述 結構體巢狀 賦值 輸出 輸入描述 程式輸出 include ...