【发布时间】:2018-09-15 17:57:44
【问题描述】:
我正在尝试编写一个用于将内容从源文件复制到目标文件的 C 程序。我想通过检查文件是否存在以及用户是否可以在尝试复制之前读取它来检查错误。 我使用 unistd.h 中的 access()。
这是上下文,我有一个文件夹:
.
├── src.txt
├── test
└── test.c
test.c 是我的程序,用于测试文件是否存在以及我是否可以读取它。
int main(){
char* path = "src.txt";
fprintf(stderr, "%d\n", access(path, F_OK));
fprintf(stderr, "%d\n", access(path, R_OK));
return 0;
}
在本例中,由于 src.file 存在且权限为 664,结果应为:
1
1
但实际输出是
0
0
即使我使用绝对路径而不是指向 src.txt 的相对路径,我也会得到相同的结果。令我不安的是,如果我尝试打开文件,它可以工作:
test.c
int main(){
char* path = "src.txt";
fprintf(stderr, "%d\n", access(path, R_OK));
fprintf(stderr, "%d\n", access(path, F_OK));
FILE *f = fopen(path, "r");
if (!f) {
fprintf(stderr, "File couldn't be opened.\n");
} else {
fprintf(stderr, "File successfully opened.\n");
fclose(f);
}
return 0;
}
它作为输出:
0
0
File successfully opened.
我确定我错过了什么,但我看不到它是什么。
【问题讨论】:
-
就像您的代码一样,
access在成功执行时返回 0,在错误时返回负值。