atexit 註冊終止函式和t許可權

2021-07-27 04:46:53 字數 2396 閱讀 5525

1.atexit()函式

atexit()註冊終止函式,函式註冊的函式應為不接受任何引數的void函式,exit()呼叫函式的順序與函式註冊的順序正好相反。

1 #include

2 #include3 void fun1()

4 7 void fun2()

8 11 void fun3()

12 15 int main()

16

結果如圖所示:

2.t許可權

t許可權只針對目錄生效,它表示只能讓所屬主以及root可以刪除(重新命名/移動)該目錄下的檔案。

如下例:

在使用者g33時,建立乙個目錄myt,並給它新增t許可權

在目錄myt中建立乙個檔案myt.c;然後切換到使用者yy中,嘗試刪除檔案myt.c,顯示刪除失敗

然後再切換回原來的使用者,刪除檔案成功。

3.strcut file---檔案結構體

檔案結構體代表乙個開啟的檔案,系統中的每個開啟的檔案在核心空間都有乙個關聯的 struct file。

原型如下:

struct file 

f_u;

struct path        f_path;

#define f_dentry    f_path.dentry   //該成員是對應的 目錄結構 。

#define f_vfsmnt    f_path.mnt

const struct file_operations    *f_op;  //該操作 是定義檔案關聯的操作的。核心在執行open時對這個 指標賦值。 

/*核心安排這個指標作為它的 open 實現的一部分,當需要分派什麼操作時,會讀取它。

filp->f_op

因為不會被核心儲存起來以在其後之用,所以我們可以改變我們對相關檔案的操作,在對檔案使用新的操作方法時,我們就會轉移到相應呼叫上。*/

atomic_long_t        f_count;

unsigned int         f_flags; 

//該成員是檔案標誌。

mode_t            f_mode;

/*檔案模式根據 fmmode_read 和

fmode_write

位來識別檔案是否可讀或可寫,或是可讀可寫。在

read()

和 write()

系統呼叫中,沒有必要對此許可權進行檢查,因為核心已經在你的系統呼叫之前已經做了檢查。如果檔案沒有相應的讀或寫許可權,那麼如果嘗試讀寫都將被拒絕,驅動程式甚至對此情況毫無知覺*/

loff_t            f_pos;

/*此變數表示當前的檔案讀寫位置。loff_t 在所有的平台上都是

64 位的變數

( long long

型, gcc

專用術語

)。驅動程式如果想知道當前在檔案中所處位置,那麼可以通過讀取此變數得知,但是一般地不應直接對此進行更改。通過

llseek()

方法可以改變檔案位置。*/

struct fown_struct    f_owner;

unsigned int        f_uid, f_gid;

struct file_ra_state    f_ra;

u64            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 */

#ifdef config_debug_writecount

unsigned long f_mnt_write_state;

#endif

};

atexit 註冊終止函式

註冊終止函式 main執行結束後呼叫的函式 void atexit void func void 乙個程序可以登記多達32個函式,這些函式將由exit自動呼叫 驗證atexit函式呼叫註冊函式的順序 include h include h void fun1 void fun2 void fun3 ...

atexit函式詳解 登記函式和終止處理函式

對c語言有所了解的人都知道main函式是整個程式的入口,但是其實不然,在核心中可以使用鏈結器來設定程式的開始地方。當核心使 個exec函式執 c程式時,在調 main函式之前先調 個特殊的啟動例程,可執 程式將此例程指定為程式的起始位址。啟動例程從核心獲取命令 引數和環境變數,然後為調 main函式...

atexit()函式呼叫註冊的順序

按照iso c的規定,乙個程序可以登記至少32個函式,這些函式將由exit自動呼叫。乙個程序可以登記若干個函式,這些函式由 exit自 動呼叫,這些函式被稱為終止處理函式,atexit 函式可以登記這些 函式。exit 呼叫終止處理函式的順 序和atexit 登記的順序相反,如果乙個函式被多次登記,...