В UNIX, если я открываю файл в режиме добавления, например
fd = open("filename", O_APPEND);
тогда, имея такой файловый дескриптор, можно легко узнать, с какими флагами он был открыт, используя fcntl
:
fcntl(fd, F_GETFL) & O_APPEND
Я знаю, что fcntl
недоступен в Windows, но мне интересно, есть ли способ определить это. Windows явно поддерживает режим добавления, например, при создании файла с CreateFile
и передаче флага FILE_APPEND_DATA
.
Но если все, что у меня есть, это дескриптор уже открытого файла, я не могу найти способ определить, какие права доступа были запрошены при первом открытии файла. В этом вопросе содержится базовый рецепт проверки прав доступа к конкретному файл, но это, похоже, не помогает. Я попробовал, и даже если я открою файл в режиме только для чтения, он все равно скажет мне, что у меня есть FILE_APPEND_DATA
доступ к файлу, если я его запрошу. Другими словами, этот метод только сообщает мне, какие права доступа у процесса к конкретному файлу (унаследованные от пользователя, запустившего процесс). Он ничего не говорит о том, какой именно доступ был запрошен при открытии файла.
Это не имеет ничего общего с тем, как Windows отслеживает, нужно ли только добавлять файл. И это последний вопрос, на который я нигде не могу найти ответа. Самое близкое, что я нашел, это GetFileInformationByHandleEx, но после просмотра документации нет ни одного атрибута файла, который можно было бы вернуть через этот API, который предлагает« режим добавления ».
Обновление: чтобы прояснить мой вопрос немного лучше, этот вопрос действительно относится только к библиотеке времени выполнения MS VC - файлам, открываемым с помощью POSIX-подобных функций _open
и записываемых с помощью fwrite
и т.п. Похоже, что собственные дескрипторы файлов win32 не имеют понятия «режим добавления».