首頁 > 運維 > linux運維 > linux c access函數怎麼用

linux c access函數怎麼用

藏色散人
發布: 2023-03-27 10:46:49
原創
1661 人瀏覽過

linux c access函數的作用是確定文件的存取權限,該函數的使用語法是“int access(const char * pathname,  int mode);”,其中參數“pathname”表示需要檢測的文件路徑名。

linux c access函數怎麼用

本教學操作環境:linux5.9.8系統、Dell G3電腦。

linux c access函數怎麼用?

linux C access

【1】作用

確定檔案的存取權限

【2】頭檔

#include <unistd.h>
登入後複製

##【3】函數定義 #

int access(const char * pathname,  int mode);
登入後複製

【4】參數說明

#  pathname: 需要偵測的檔案路徑名稱

#  mode: 參數為0時,表示檢查檔案的存在性,如果檔案存在,回傳0,不存在,回傳-1。 這個函數也可以檢查其它檔案屬性:

  06 檢查讀寫權限

  04 檢查讀取權限

  02 檢查寫入權限

  01 檢查執行權限

#  00 檢查檔案的存在性

##  00 檢查檔案的存在性

【5】傳回值

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

【6】函數說明

  access()會檢查是否可以讀取/寫入某一已存在的檔案。

  參數mode有幾種情況組合, R_OK,W_OK,X_OK 和F_OK。

  R_OK,W_OK與X_OK分別用來檢查檔案是否具有讀取、寫入和執行的權限。 F_OK則是用來判斷該檔案是否存在。

  由於access()只作權限的核查,並不理會文件形態或文件內容,因此,如果一目錄表示為“可寫入”,表示可以在該目錄中建立新檔案等操作,而非意味此目錄可以當作檔案處理。

  例如,你會發現DOS的檔案都具有「可執行」權限,但用execve()執行時則會失敗。

【7】錯誤代碼

#  EACCESS  參數pathname 所指定的檔案不符合所要求測試的權限。

  EROFS   要測試寫入權限的檔案存在於唯讀檔案系統內。

  EFAULT  參數pathname指標超出可存取記憶體空間。

  EINVAL  參數mode 不正確。

  ENAMETOOLONG  參數pathname太長。

  ENOTDIR  參數pathname為一目錄。

  ENOMEM  核心記憶體不足    #######

  ELOOP 参数pathname有过多符号连接问题。

  EIO I/O 存取错误。

【8】附加说明

使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。

【9】范例

// 范例1
#include <unistd.h>
int main()
{
    if (access("/etc/passwd", R_OK) == 0)
        printf("/etc/passwd can be read\n");
    return 0;
}
// 范例2
#include 
#include <unistd.h>
int file_exists(char *filename);
int main(void)
{
    printf("Does NOTEXIST.FIL exist: %s\n",
    file_exists("NOTEXISTS.FIL") ? "YES" : "NO");
    return 0;
}
int file_exists(char *filename)
{
    return (access(filename, 0) == 0);
}
登入後複製

【10】相关函数

stat,open,chmod,chown,setuid,setgid

推荐学习:《linux视频教程

以上是linux c access函數怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板