Can CreateFile () un archivo abierto al mismo tiempo en dos hilos diferentes
-
21-09-2019 - |
Pregunta
Can CreateFile () Abrir un archivo al mismo tiempo en dos hilos diferentes
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;
}
cada vez que sale en la posición GetLastError
. y el error es ERROR_SHARING_VIOLATION
(32, "The
proceso no tiene acceso al archivo porque está siendo utilizado por otra
proceso ".)
si yo comparto canot abierto el archivo, entonces ¿cuál es el uso de la FILE_SHARE_WRITE | FILE_SHARE_READ
Gracias
The program environment is Win32 Vs2003
Solución
El identificador de archivo es siempre compartido entre hilos. Todo lo que necesita hacer es simplemente usar el mango de forma normal, pero en dos hilos.
Su segunda llamada a CreateFile()
falla porque usted solicita más acceso, GENERIC_ALL
, lo que se permiten para el acceso compartido, FILE_SHARE_WRITE | FILE_SHARE_READ
.
Si en vez solicitada sólo GENERIC_READ | GENERIC_WRITE
, que tendría éxito.
El comportamiento CreateFile()
será el mismo si se llama en un solo hilo.