Mingw を使用して Windows でプログラムをコンパイルしています。開いているファイル記述子のアクセス モードを取得するにはどうすればよいですか?
2 に答える
Win32.hlpによると、APIBOOL 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リファレンスは、aが何であるかについては必然的にあいまいSECURITY_DESCRIPTOR
ですが、特定のプロパティを取得するためのパラメータとしてそのアドレスを使用して、他の多くの関数を呼び出すことができます。これSECURITY_INFORMATION
はDWORD
、これらの関数のどれを呼び出すかを指定する定数です。詳細については、http://msdn.microsoft.com/en-us/library/aa446641%28VS.85%29.aspxを参照してください。
編集-2番目のコードセクションは厄介に見え続けますが、APIリファレンスへのリンクは、少し掘り下げればどこに行く必要があるかを示します。
私が知る限り、あなたはできません。
https://web.archive.org/web/20161107234935/http://www.zemris.fer.hr/predmeti/os1/misc/Unix2Win.htmは、UNIX から Windows への移植の優れたガイドです。
Cygwin POSIX「エミュレーション」を使用できますか?