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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top