linux檔案系統中的結構體

2021-07-16 08:04:06 字數 2722 閱讀 1403

1.1 struct file

struct file結構體定義在include/linux/fs.h中定義。檔案結構體代表乙個開啟的檔案,系統中的每個開啟的檔案在核心空間都有乙個關聯的 struct file。它由核心在開啟檔案時建立,並傳遞給在檔案上進行操作的任何函式。在檔案的所有例項都關閉後,核心釋放這個資料結構。在核心建立和驅動原始碼中,struct file的指標通常被命名為file或filp。如下所示:

struct file f_u;

struct path f_path; 包含dentry和mnt兩個成員,用於確定檔案路徑

#define f_dentry f_path.dentry f_path的成員之一,當前檔案的dentry結構

#define f_vfsmnt f_path.mnt 表示當前檔案所在檔案系統的掛載根目錄

const struct file_operations *f_op; 與該檔案相關聯的操作函式

atomic_t f_count; 檔案的引用計數(有多少程序開啟該檔案)

unsigned int f_flags; 對應於open時指定的flag

mode_t f_mode; 讀寫模式:open的mod_t mode引數

off_t f_pos; 該檔案在當前程序中的檔案偏移量

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

unsigned int f_uid, f_gid; 檔案所有者id,所有者組id

struct file_ra_state f_ra; 在linux/include/linux/fs.h中定義,檔案預讀相關

unsigned long 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 */

};1.2 struct dentry

dentry的中文名稱是目錄項,是linux檔案系統中某個索引節點(inode)的鏈結。這個索引節點可以是檔案,也可以是目錄。 inode(可理解為ext2 inode)對應於物理磁碟上的具體物件,dentry是乙個記憶體實體,其中的d_inode成員指向對應的inode。也就是說,乙個inode可以在執行的時候鏈結多個dentry,而d_count記錄了這個鏈結的數量。

struct dentry ;

1.3 struct files_struct

對於每個程序,包含乙個files_struct結構,用來記錄檔案描述符的使用情況,定義在include/linux/file.h中

struct files_struct

;  struct fdtable ;

1.4 struct fs_struct

struct fs_struct ;

1.5 struct inode

索引節點物件由inode結構體表示,定義檔案在linux/fs.h中。

struct inode u;

};1、struct inode──字元裝置驅動相關的重要結構介紹

核心中用inode結構表示具體的檔案,而用file結構表示開啟的檔案描述符。linux2.6.27核心中,inode結構體具體定義如下:

struct inode ;

int i_cindex;

__u32 i_generation;

#ifdef config_dnotify

unsigned long i_dnotify_mask; /* directory notify events */

struct dnotify_struct *i_dnotify; /* for directory notifications */

#endif

#ifdef config_inotify

struct list_head inotify_watches; /* watches on this inode */

struct mutex inotify_mutex; /* protects the watches list */

#endif

unsigned long i_state;

unsigned long dirtied_when; /* jiffies of first dirtying */

unsigned int i_flags;

atomic_t i_writecount;

#ifdef config_security

void *i_security;

#endif

void *i_private; /* fs or device private pointer */

};

linux 檔案系統 Linux 檔案系統結構介紹

ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...

LINUX檔案系統中的stat結構

stat結構的成員在不同的unix中會有所變化.但一般都包含以下所示的內容 st mode 檔案許可權和檔案型別資訊。st ino 與該檔案關聯的inode st dev 儲存檔案的裝置 st uid 檔案屬主的uid號 st gid 檔案屬主的gid號 st atime 檔案上次被訪問的時間 st...

Linux檔案系統結構

linux檔案系統是乙個倒轉的單根數數狀結構 所有的檔案資料夾結構都是存在於乙個根目錄下面 不同於windows作業系統,windows作業系統對於大小寫不敏感,但是linux系統嚴格區分大小寫 路徑使用 分割 windows中使用 每乙個shell或系統程序都有乙個當前工作目錄 我們使用pwd命令...