Sous Windows / mingw, quel est l’équivalent de `fcntl (fd, F_GETFL) | O_ACCMODE`?

Je comstack un programme sous Windows avec Mingw. Comment puis-je obtenir le mode d’access pour un descripteur de fichier ouvert?

Selon Win32.hlp, l’API fournit la fonction BOOL GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation) dans KERNEL32. LPBY_HANDLE_FILE_INFORMATION est un BY_HANDLE_FILE_INFORMATION* , où BY_HANDLE_FILE_INFORMATION est comme suit:

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

Après avoir appelé cette fonction, si elle renvoie true, BY_HANDLE_FILE_INFORMATION contient des données pertinentes pour votre fichier. dwFileAtsortingbutes peut contenir l’indicateur FILE_ATTRIBUTE_READ_ONLY .

Si vous voulez plus que cela, il y a aussi:

 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 ); 

La référence de l’API est nécessairement vague sur ce qu’est un SECURITY_DESCRIPTOR , mais vous pouvez appeler un tas d’autres fonctions en utilisant son adresse comme paramètre pour obtenir des propriétés spécifiques. SECURITY_INFORMATION est juste une constante DWORD spécifiant laquelle de ces fonctions vous souhaitez appeler. Vous pouvez trouver plus d’informations sur http://msdn.microsoft.com/en-us/library/aa446641%28VS.85%29.aspx

Edit – la deuxième section de code ne cesse de se dessiner, mais le lien vers la référence de l’API vous mènera là où vous devez aller si vous vous attardez un peu.

Autant que je sache, vous ne pouvez pas.

http://www.zemris.fer.hr/predmeti/os1/misc/Unix2Win.htm est un bon guide pour le portage d’unix vers Windows.

Peut-être que vous pourriez utiliser l’émulation Cygwin POSIX?