Документация подразумевает, что EINVAL будет результатом, если один из параметров будет недействительным. Поскольку "r+"
должен быть допустимым указателем, и, если он вообще скомпилирован, _SH_DENYRW
должен быть допустимым флагом, то остается только вопрос, является ли ваша переменная path
не NULL, указывает на память, которая существует и читать и содержит действительное имя пути.
Я только что попробовал следующее:
#include <stdio.h>
#include <share.h>
int main(int argc, char **argv)
{
FILE *f;
if (argc != 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
exit(1);
}
f = _fsopen(argv[1], "r+", _SH_DENYRW);
if (f) {
printf("Open ok.\n");
fclose(f);
} else {
perror(argv[1]);
}
return 0;
}
На файлах, которые существуют и могут быть записаны, независимо от их размера, он печатает «Open ok.», Что означает, что _fsopen()
успешно. Пара других дел:
Файл только для чтения:
C:>fsopen ro.txt
ro.txt: Permission denied
Нет файла:
C:>fsopen nosuchfile
nosuchfile: No such file or directory
Файл устройства:
C:>fsopen NUL:
Open ok.
Файл нулевой длины:
C:>fsopen zero.txt
Open ok.