Linux內核總是根據進程的有效用戶ID和有效組ID來決定一個進程是否有權訪問某個文件。因此,在編寫調整用戶ID的程序時,在讀寫一個文件之前必須明確檢查其用戶是否原本就有對此文件的訪問權限。為了實現這種確認,需要使用access函數。
一般形式為;
#include<unistd.h>
int access(const char *pathname,int mode);
其中,pathname是希望檢驗的文件名(包含路徑),mode是欲檢查的訪問權限,如下所示
R_OK 檢驗調用進程是否有讀訪問權限
W_OK 檢驗調用進程是否有寫訪問權限
X_OK 檢驗調用進程是否有執行訪問權限
F_OK 檢驗規定的文件是否存在
access檢查用戶對一個文件的權限情況,根據mode的值檢查調用進程對文件pathname是否具有讀、寫、或執行的權限。若進程實際用戶具有mode所指出的權限,access返回0.否則返回-1.
例如:
access("test",06);
access("test",F_OK);
分別用來檢查實際用戶對test文件是否具有讀寫權限和test文件是否存在。