Я пытаюсь написать программу на C для копирования содержимого из исходного файла в файл назначения.Я хочу проверить на наличие ошибок, проверив, существует ли файл и может ли пользователь прочитать его, прежде чем пытаться скопировать его.Я использую access () из unistd.h.
Вот контекст, у меня есть папка:
.
├── 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.
Яконечно, я что-то упускаю, но не вижу, что это такое.