Je peux ouvrir un volume "exclusivement" avec CreateFile en mettant dwShareMode à 0:ouverture du volume exclusif
#include <windows.h>
int main() {
HANDLE ki = CreateFile("\\\\.\\F:", GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
}
Je peux ouvrir un volume en mode "partagé" avec fopen:
#include <stdio.h>
int main() {
FILE* ki = fopen("\\\\.\\F:", "r+b");
}
I peut ouvrir un fichier « exclusivement » avec ouvert:
#include <stdio.h>
#include <fcntl.h>
int main() {
int ju = open("lima.txt", O_RDWR | O_EXCL);
FILE* ki = fdopen(ju, "r+b");
}
Cependant, si je tente d'ouvrir un volume avec ouvert, il échouera:Après le test, cela se produit avec ou sans l'indicateur O_EXCL. Est-ce que le volume exclusif ouvre quelque chose qui ne peut être fait qu'avec CreateFile, ou est-ce que je manque quelque chose?
Par https://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx 'O_EXCL' ne signifie pas "accès exclusif". Ce n'est pas un équivalent de 'dwShareMode = 0'. Il est utilisé avec 'O_CREAT' pour ouvrir un fichier seulement s'il n'existe pas déjà. –
Pour mémoire, il est probablement imprudent d'utiliser des fonctions d'E/S d'exécution C avec des volumes. Ils ne sont pas conçus pour ça. –