access() 函數詳解#include <io.h> // Windows/Unix 通用頭文件 (Unix 為 <unistd.h>)
int access(const char *filename, int amode);
amode 取值| 值 | 含義 |
|---|---|
00 (或 F_OK) | 檢查文件存在性。存在返回 0,不存在返回 -1。 |
04 (R_OK) | 檢查讀權限。 |
02 (W_OK) | 檢查寫權限。 |
06 | 檢查讀寫權限。 |
01 (X_OK) | 檢查執行權限。 |
fopen(path, "r") 判斷存在性有缺陷:無讀權限時也會失敗。
access() 僅檢查元數據,**無讀權限也能正確判斷文件是否存在**。
#include <stdio.h>
#include <io.h>
int main() {
printf("access result: %d\n", access("111", 0)); // 0 存在, -1 不存在
return 0;
}
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
void main(void) {
// 檢查存在性
if (_access("ACCESS.C", 0) != -1) {
printf("File ACCESS.C exists\n");
// 檢查寫權限
if (_access("ACCESS.C", 2) != -1)
printf("File ACCESS.C has write permission\n");
}
}
/* Output:
File ACCESS.C exists
File ACCESS.C has write permission
*/
註:Windows 下常用下劃線版 _access,行為一致。Unix/Linux 直接用 access,需包含 <unistd.h>。