linux c access函數的作用是確定文件的存取權限,該函數的使用語法是“int access(const char * pathname, int mode);”,其中參數“pathname”表示需要檢測的文件路徑名。
本教學操作環境: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中文網其他相關文章!