В Windows файлы открываются с помощью функции CreateFileW
, которая использует системный вызов NtCreateFile
.
Аргумент dwShareMode
используется для указания файлаполитика совместного использования и содержит комбинацию флагов FILE_SHARE_DELETE
, FILE_SHARE_READ
и FILE_SHARE_WRITE
, которые сопоставляются с shflag
аргументом _fsopen
.
Если вы хотите узнать, как может выглядеть реализация функцииНапример, сначала вы должны иметь в виду, что MSVCRT пытается поддерживать некоторый эквивалент API дескриптора файла POSIX.Затем проверьте следующие функции:
_open_osfhandle
позволяет преобразовать NT HANDLE
в POSIX-подобный файловый дескриптор _fdopen
позволяет получить FILE *
из файлового дескриптора (эквивалент функции POSIX fdopen
).
Таким образом, возможная реализация может выглядеть следующим образом (впсевдокод):
FILE *_fsopen(...)
{
HANDLE hFile = CreateFileW(...);
int fd = _open_osfhandle(hFile, ...);
return _fdopen(fd, ...);
}
В Linux нет эквивалента политики общего доступа к файлам, поэтому эквивалента нет.
PS: Другая связанная функция - _wsopen
- объединяет CreateFileW
и _open_osfhandle
.