1、struct file結構體定義在include/linux/fs.h中定義。文件結構體代表一個打開的文件,系統中的每個打開的文件在內核空間都有一個關聯的 struct file。它由內核在打開文件時創建,并傳遞給在文件上進行操作的任何函數。在文件的所有實例都關閉后,內核釋放這個數據結構。在內核創建和驅動源碼中,struct file的指針通常被命名為file或filp。如下所示:struct file {union {struct list_head fu_list; 文件對象鏈表指針linux/include/linux/list.hstruct rcu_head fu_rcuhead; RCU(Read-Copy Update)是Linux 2.6內核中新的鎖機制} 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時指定的flagmode_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,所有者組idstruct file_ra_state f_ra; 在linux/include/linux/fs.h中定義,文件預讀相關};
2、struct files_struct
對于每個進程,包含一個files_struct結構,用來記錄文件描述符的使用情況,定義在include/linux/file.h中
struct files_struct
{
atomic_t count; 使用該表的進程數
struct fdtable *fdt;
struct fdtable fdtab;
spinlock_t file_lock ____cacheline_aligned_in_smp;
int next_fd; 數值最小的最近關閉文件的文件描述符,下一個可用的文件描述符
struct embedded_fd_set close_on_exec_init; 執行exec時需要關閉的文件描述符初值集合
struct embedded_fd_set open_fds_init; 文件描述符的屏蔽字初值集合
struct file * fd_array[NR_OPEN_DEFAULT]; 默認打開的fd隊列
};
3、Linux中的t命令
t命令只針對目錄有效,對于目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅有自己與root才有權力刪除。
創建目錄dir,并在該目錄下創建文件test,如下

修改dir權限后如下

切換到另一用戶無法刪除test文件,如下

切換回自己用戶可以刪除如下

切換到root下可以刪除如下

4、atexit函數
調用該函數初期沒有任何現象,在進程退出時,系統才會主動調用atexit函數所注冊的函數指針所指向的函數-----------回調函數。
析構函數用來處理對象,上述函數用來處理進程。
創建三個函數,用atexit函數依次調用,如下
#include<stdio.h>
int fun1()
{
PRintf("hello fun1/n");
}
int fun2()
{
printf("hello fun2/n");
}
int fun3()
{
printf("hello fun3/n");
}
int main()
{
atexit(fun1);
atexit(fun2);
atexit(fun3);
return 0;
}
結果如下

新聞熱點
疑難解答