我正在使用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 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是什么不一定很含糊,但是您可以使用其地址作为参数来调用其他函数来获取特定的属性。 SECURITY_INFORMATION只是DWORD常量,用于指定您计划调用以下哪个函数。您可以在http://msdn.microsoft.com/en-us/library/aa446641%28VS.85%29.aspx上找到更多信息。

编辑-第二个代码部分看起来总是很棘手,但是如果您进行了一些深入的研究,则指向API引用的链接将引导您前往所需的位置。

关于c - 在Windows/mingw上,等效 `fcntl(fd, F_GETFL) | O_ACCMODE`是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4636875/

10-13 03:16