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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top