国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linux中的file_struct、t命令以及atexit函數有關知識

2019-11-08 02:02:00
字體:
來源:轉載
供稿:網友

 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;

  }

   

結果如下


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大庆市| 红河县| 罗城| 寿宁县| 屯门区| 东源县| 东辽县| 德兴市| 乐平市| 沁水县| 高密市| 台南县| 仙居县| 安西县| 康保县| 冀州市| 铁岭市| 明光市| 呼和浩特市| 马公市| 大渡口区| 错那县| 鹤峰县| 内黄县| 凌源市| 平阴县| 盈江县| 界首市| 柘荣县| 平武县| 哈密市| 永安市| 恩施市| 开化县| 封丘县| 五台县| 砚山县| 茌平县| 磴口县| 宁夏| 屏东县|