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 登記的順序相反,如果乙個函式被多次登記,...