1.每個檔案程序控制塊中都有乙份檔案描述符表(可以把它看成是乙個陣列,裡面的元素是指向file
結構體指標型別),這個陣列的下標就是檔案描述符。
2.file結構體中有開啟檔案的許可權,當前讀寫位置,引用計數等屬性。每個file結構體都指向乙個file_operations結構體,這個結構體的成員都是函式指標,指向實現各種檔案操作的核心函式。
3.每個file結構體都有乙個指向dentry
結構體的指標。為了減少讀盤次數,核心快取了目錄的樹狀結構,稱為dentry cache,其中每個節點是乙個dentry結構體
4.每個dentry結構體都有乙個指標指向inode
結構體。
5.inode結構體中儲存著從磁碟分割槽的inode讀上來資訊,例如所有者、檔案大小、檔案型別和許可權位等。
6.每個inode結構體都有乙個指向inode_operations
結構體的指標。
7.inode_operations是一組函式指標指向一些完成檔案目錄操作的核心函式。屬於同一檔案系統的各inode結構體可以指向同乙個inode_operations結構體。
8.inode結構體有乙個指向super_block
結構體的指標。
9.super_block結構體儲存著從磁碟分割槽的超級塊讀上來的資訊。
名稱**實現
struct file
file結構體
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 */
struct dentry
dentry結構體
struct dentry u;
mysql 檔案描述符 檔案描述符
toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...
檔案描述符
檔案描述符 是個很小的正整數,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。檔案描述符的優點 相容posix標準,許多 linux 和unix 系統呼叫都依賴於它。檔案描述符的缺點 不能移植到unix以外的系統上去,也不直觀。基於檔案描述符的輸入輸出函式 open 開啟乙個檔案...
檔案描述符
作業系統程序表中存放各個檔案進行檔案描述 核心 kernel 利用檔案描述符 file descriptor 來訪問檔案。檔案描述符是非負整數。開啟現存盤案或新建檔案時,核心會返回乙個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。目錄檔案描述符概述 如何建立檔案描述符 使用的好處 缺點...