Peut CreateFile () Ouvrir un fichier en même temps dans deux thread différent
-
21-09-2019 - |
Question
Peut-CreateFile () Ouvrir un fichier en même temps dans deux thread différent
void new_function(void * what)
{
HANDLE h = CreateFile("c:\\tmp", GENERIC_ALL,FILE_SHARE_WRITE |
FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h == INVALID_HANDLE_VALUE)
{
DWORD d = GetLastError();
return ;
}
Sleep(10000);
}
int main()
{
HANDLE h = CreateFile("c:\\tmp", GENERIC_ALL,FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Sleep(10000);
return 1;
}
à chaque fois qu'il sort à la position de GetLastError
. et l'erreur est ERROR_SHARING_VIOLATION
(32, « The
processus ne peut pas accéder au fichier car il est utilisé par un autre
processus ".)
si je partage CANOT ouvrir le fichier, alors quel est l'utilisation du FILE_SHARE_WRITE | FILE_SHARE_READ
Thanx
The program environment is Win32 Vs2003
La solution
Le descripteur de fichier est toujours partagé entre les threads. Tout ce que vous devez faire est d'utiliser simplement la poignée comme normale, mais sur deux threads.
Votre deuxième appel à CreateFile()
échoue parce que vous demandez plus d'accès, GENERIC_ALL
, que vous autorisez l'accès partagé, FILE_SHARE_WRITE | FILE_SHARE_READ
.
Si vous plutôt demandé que GENERIC_READ | GENERIC_WRITE
, il réussirait.
Le comportement CreateFile()
sera le même si vous l'appelez sur un seul thread.