11.16.2015

Linux C access()

在學習mkfifo()的時後,有用到access()這個函式,它會先確認具名管線是否存在;假如不存在就先建立管線,然後再去做存取的動作。

先把這個函式的用法記下來,說不定爾后還會再用到。

功能說明:判斷是否具有存取檔案的權限。

標頭檔:#include <unistd.h>

函式宣告:int access(const char *pathname, int mode);

函式說明:access()會檢查是否可以讀寫某一已存在的檔案。引數mode有幾種情況的組合:R_OK, W_OK, X_OK和F_OK;R_OK, W_OK和X_OK用來檢查檔案是否具有讀取、寫入和執行的權限。F_OK則是用來判斷該檔是否存在;由於access()只做權限的查核,並不理會檔案型態或是檔案內容。

回傳值:若所有欲查核的權限都通過了檢查則傳回0,表示成功;只要有一權限被禁止 (Denied)則傳回-1。

範例:
#include <unistd.h>
#include <stdio.h>

int 
main()
int argc;
char *argv[];
char **envp[];
{
    if (access("/root/TEST.TXT", R_OK) == 0)
        fprintf(stdout, "Allow!! \n");
    else
        fprintf(stderr, "Deny!! \n");

    return 0;
}
附加說明:使用access()做使用者認證方面的判斷要特別小心,例如在access()之後再做open()的空檔可能會造成系統安全上的問題。

沒有留言:

張貼留言