В 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 "эмуляция"?