1. 程式人生 > >(十五)檔案操作——access函式的介紹和使用

(十五)檔案操作——access函式的介紹和使用

  1. 標頭檔案:#include < unistd.h>

    定義函式:int access(const char * pathname, int mode);

    函式說明:access()會檢查是否可以讀/寫某一已存在的檔案。

  2. 引數mode 有幾種情況組合:
    1、R_OK, W_OK, X_OK和F_OK. R_OK, W_OK 與X_OK 用來檢查檔案是否具有讀取寫入和執行的許可權。
    2、F_OK 則是用來判斷該檔案是否存在。由於access()只作許可權的核查, 並不理會檔案形態或檔案內容,因此,如果一目錄表示為”可寫入”,表示可以在該目錄中建立新檔案等操作,而非意味此目錄可以被當做檔案處理。例如:你會發現DOS 的檔案都具有”可執行”許可權,但用execve()執行時則會失敗。

  3. 返回值:若所有欲查核的許可權都通過了檢查則返回0 值,表示成功,只要有一許可權被禁止則返回-1。

  4. 錯誤程式碼:
    1、EACCESS 引數pathname 所指定的檔案不符合所要求測試的許可權.
    2、EROFS 欲測試寫入許可權的檔案存在於只讀檔案系統內.
    3、EFAULT 引數pathname 指標超出可存取記憶體空間.
    4、EINVAL 引數mode 不正確.
    5、ENAMETOOLONG 引數pathname 太長.
    6、ENOTDIR 引數pathname 為一目錄.
    7、ENOMEM 核心記憶體不足
    8、ELOOP 引數pathname 有過多符號連線問題.
    9、EIO I/O 存取錯誤.

  5. 例子:

#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    //R_OK 是否有讀許可權
    //W_OK 是否有寫許可權
    //X_OK 是否有執行許可權
    //F_OK 測試一個檔案是否存在
    if(access("abc",F_OK) <0
) { perror("abc"); exit(1); } printf("abc is ok\n"); return 0; }