Linux access()函式 使用
Linux access函式用法:
#include
#include
int access(const char *pathname, int mode);
Linux access函式引數:
pathname: 需要測試的檔案路徑名。
mode: 需要測試的操作模式,可能值是一個或多個R_OK(可讀?), W_OK(可寫?), X_OK(可執行?) 或 F_OK(檔案存在?)組合體。
Linux access函式返回說明:
成功執行時,返回0。失敗返回-1,errno被設為以下的某個值
EINVAL: 模式值無效
EACCES: 檔案或路徑名中包含的目錄不可訪問
ELOOP : 解釋路徑名過程中存在太多的符號連線
ENAMETOOLONG:路徑名太長
ENOENT:路徑名中的目錄不存在或是無效的符號連線
ENOTDIR: 路徑名中當作目錄的元件並非目錄
EROFS: 檔案系統只讀
EFAULT: 路徑名指向可訪問的空間外
EIO:輸入輸出錯誤
ENOMEM: 不能獲取足夠的核心記憶體
ETXTBSY:對程式寫入出錯
Linux access函式例子:
例子:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
if (argc < 2) {
printf("Usage: ./test filename\n");
exit(1);
}
if (access(argv[1], F_OK) == -1) {
puts("File not exists!");
exit(2);
}
if (access(argv[1], R_OK) == -1)
puts("You can't read the file!");
else
if (access(argv[1], R_OK | W_OK) != -1)
puts("You can read and write the file");
else
puts("You can read the file");
exit(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
if (argc < 2) {
printf("Usage: ./test filename\n");
exit(1);
}
if (access(argv[1], F_OK) == -1) {
puts("File not exists!");
exit(2);
}
if (access(argv[1], R_OK) == -1)
puts("You can't read the file!");
else
if (access(argv[1], R_OK | W_OK) != -1)
puts("You can read and write the file");
else
puts("You can read the file");
exit(0);
}
由於Linux Access函式只作許可權的核查,並不理會檔案形態或檔案內容,因此,如果一目錄表示為“可寫入”,表示可以在該目錄中建立新檔案等操作,而非意味此目錄可以被當做檔案處理。例如,你會發現DOS的檔案都具有“可執行”許可權,但用execve執行時則會失敗。
Linux Access函式(判斷是否具有存取檔案的許可權)
相關函式
stat,open,chmod,chown,setuid,setgid
表標頭檔案
#include<unistd.h>
定義函式
int access;
Linux Access函式說明
access會檢查是否可以讀/寫某一已存在的檔案。引數mode有幾種情況組合, R_OK,W_OK,X_OK 和F_OK。R_OK,W_OK與X_OK用來檢查檔案是否具有讀取、寫入和執行的許可權。F_OK則是用來判斷該檔案是否存在。由於access只作許可權的核查,並不理會檔案形態或檔案內容,因此,如果一目錄表示為“可寫入”,表示可以在該目錄中建立新檔案等操作,而非意味此目錄可以被當做檔案處理。例如,你會發現DOS的檔案都具有“可執行”許可權,但用execve執行時則會失敗。
Linux Access函式返回值
若所有欲查核的許可權都通過了檢查則返回0值,表示成功,只要有一許可權被禁止則返回-1。
錯誤程式碼
EACCESS 引數pathname 所指定的檔案不符合所要求測試的許可權。
EROFS 欲測試寫入許可權的檔案存在於只讀檔案系統內。
EFAULT 引數pathname指標超出可存取記憶體空間。
EINVAL 引數mode 不正確。
ENAMETOOLONG 引數pathname太長。
ENOTDIR 引數pathname為一目錄。
ENOMEM 核心記憶體不足
ELOOP 引數pathname有過多符號連線問題。
EIO I/O 存取錯誤。
Linux Access函式附加說明
使用access作使用者認證方面的判斷要特別小心,例如在access後再做open的空檔案可能會造成系統安全上的問題。
範例
/ 判斷是否允許讀取/etc/passwd /
#include<unistd.h>
int main
執行
/etc/passwd can be read
相關文章
- Linux下getopt函式的使用Linux函式
- Linux Clone函式Linux函式
- linux之__setup函式Linux函式
- 如何使用async和await這對組合設計統一的取Access Token的函式AI函式
- 函式: 函式是怎麼使用的?函式
- JAVA使用accessJava
- 使用GDK7除錯Linux核心之printk函式除錯Linux函式
- Linux中select()函式分析Linux函式
- 研究linux函式 之 fork()Linux函式
- 何時使用函式表示式與函式宣告函式
- edge函式使用函式
- 02_函式定義及使用函式函式
- 在Linux中, 什麼是shell函式?如何使用它們?Linux函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- smarty塊函式使用函式
- Shell 函式的使用函式
- Thunk函式的使用函式
- python-函式使用Python函式
- Generator 函式的使用函式
- linux的命令列解析引數之getopt_long函式使用Linux命令列函式
- 如何在 Linux Shell 程式設計中定義和使用函式Linux程式設計函式
- 解析Linux訊號集操作函式Linux函式
- vb如何使用ftp函式,vb如何使用ftp函式要知道這些FTP函式
- MYSQL事件使用 日期函式MySql事件函式
- 在 bash 中使用函式函式
- golang函式使用基礎Golang函式
- tap函式的日常使用函式
- [20200213]函式nullif使用.txt函式Null
- hive視窗函式使用Hive函式
- async函式使用場景函式
- MATLAB中linspace函式使用Matlab函式
- python函式的基本使用Python函式
- 高階函式的使用函式
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- Python hasattr() 函式 // python中hasattr()、getattr()、setattr()函式的使用Python函式
- 第五篇 匿名函式、內建函式、import的使用、包的使用函式Import
- Java @FunctionInterface函式式介面使用說明JavaFunction函式
- 使用函式式語言實踐DDD函式
- linux Shell 命令列-07-func 函式Linux命令列函式