在Windows / mingw上,相当于`fcntl(fd,F_GETFL)|“ O_ACCMODE`?

我正在用Mingw在Windows上编译一个程序。 如何获得打开的文件描述符的访问模式?

根据Win32.hlp,API在KERNEL32中提供函数BOOL GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)LPBY_HANDLE_FILE_INFORMATIONBY_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 GetcoreelObjectSecurity( 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是什么都不清楚,但是可以使用其地址作为参数来调用一堆其他函数以获取特定的属性。 SECURITY_INFORMATION只是一个DWORD常量,指定您打算调用哪些函数。 你可以在http://msdn.microsoft.com/en-us/library/aa446641%28VS.85%29.aspx找到更多的信息。

编辑 – 第二个代码部分不断出现扭曲,但链接到API的参考将带领你去你需要去的地方,如果你挖了一下。

据我所知,你不能。

http://www.zemris.fer.hr/predmeti/os1/misc/Unix2Win.htm是一个很好的unix-to-windows移植指南。

也许你可以使用Cygwin POSIX“模拟”?