В Windows / mingw, что эквивалентно "fcntl (fd, F GETFL) | o ACCMODE"?

я компилирую программу в Windows с помощью Mingw. Как получить режим доступа к открытому файловому дескриптору?

2 ответов


в соответствии с Win32.hlp, API предоставляет функцию BOOL GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation) в kernel32. LPBY_HANDLE_FILE_INFORMATION - это BY_HANDLE_FILE_INFORMATION*, где BY_HANDLE_FILE_INFORMATION следующим образом:

typedef struct _BY_HANDLE_FILE_INFORMATION { // bhfi  
    DWORD    dwFileAttributes; 
    FILETIME ftCreationTime; 
    FILETIME ftLastAccessTime; 
    FILETIME ftLastWriteTime; 
    DWORD    dwVolumeSerialNumber; 
    DWORD    nFileSizeHigh; 
    DWORD    nFileSizeLow; 
    DWORD    nNumberOfLinks; 
    DWORD    nFileIndexHigh; 
    DWORD    nFileIndexLow; 
} BY_HANDLE_FILE_INFORMATION;

после вызова указанной функции, если она возвращает true,BY_HANDLE_FILE_INFORMATION содержит данные, относящиеся к файлу. dwFileAttributes может содержать тег FILE_ATTRIBUTE_READ_ONLY флаг.

если вы хотите больше, чем это, там же:

BOOL GetKernelObjectSecurity(
 HANDLE Handle,                             // handle of object to query
 SECURITY_INFORMATION RequestedInformation, // requested information
 PSECURITY_DESCRIPTOR pSecurityDescriptor,  // address of security descriptor
 DWORD nLength,                             // size of buffer for security descriptor 
 LPDWORD lpnLengthNeeded                    // address of required size of buffer
);

ссылка API обязательно расплывчата о том, что SECURITY_DESCRIPTOR есть, но вы можете назвать кучу других функции, используя ее адрес в качестве параметра для получения определенных свойств. The SECURITY_INFORMATION это просто DWORD константа, указывающая, какую из этих функций вы планируете вызвать. Вы можете найти больше информации на http://msdn.microsoft.com/en-us/library/aa446641%28VS.85%29.aspx

Edit-второй раздел кода продолжает выходить, выглядя странным, но ссылка на ссылку API приведет вас туда, куда вам нужно пойти, если вы немного покопаетесь.


насколько я могу судить, Вы не можете.

http://www.zemris.fer.hr/predmeti/os1/misc/Unix2Win.htm является хорошим руководством для переноса unix-в-windows.

может быть, вы могли бы использовать Cygwin POSIX "эмуляция"?