Según tengo entendido, cuando se escribe un archivo, el proceso de escritura en el archivo obtiene un bloqueo exclusivo. Por lo tanto, otros procesos no pueden acceder a este archivo para leerlo.
Con el conocimiento anterior, no puedo entender cómo puedo reproducir un video en un reproductor multimedia cuando el navegador todavía lo está descargando.
Respuestas:
Tu comprensión está mal. Varios procesos de Linux pueden escribir en el mismo archivo a la vez (y lo que sucede puede no estar especificado, excepto cuando los procesos sobrescriben diferentes segmentos de ese archivo). Y algún otro proceso de Linux (por ejemplo, su navegador) puede leer un archivo en el que está escrito .
Podrías adoptar una convención para evitar eso . Por ejemplo, podría usar el bloqueo de archivos de aviso (adoptando la convención de que todo programa relevante debería hacer eso), por ejemplo, con flock (2) , lockf (3) , etc. Pero eso no prohibirá otros procesos (no seguir sus convenciones) para acceder (o incluso escribir) a ese archivo. Puede usar maquinaria de permisos (por ejemplo, dedicando un usuario del sistema a su programa setuid ).
Consulte también las respuestas this & that en StackOverflow (algunas de ellas mencionaron los mecanismos de bloqueo obligatorios obsoletos específicos de Linux). Lea sobre las propiedades de ACID , considere usar alguna base de datos ( sqlite , PostGreSQL , MongoDB , etc.) o algún archivo indexado ( gdbm ).
No conozco Windows, pero escuché el rumor de que no permite el acceso concurrente o escribe en el mismo archivo.
fuente
Los archivos generalmente no están bloqueados: bloqueo de archivos Unix . También es bastante común tener múltiples lectores de archivos pero solo un escritor. Los problemas solo ocurren cuando tendrías múltiples escritores.
Además, la mayoría de los formatos de archivos de videos (y especialmente en la web) son transmisibles, lo que significa que no es necesario tener todo el video para reproducirlo.
fuente
Los sistemas operativos Unix no utilizan el bloqueo obligatorio (Gnu / Linux es Unix, otros ejemplos son UNIX, BSD, Mac OSX). Bloqueo evitado siempre que sea posible.
Algunos otros sistemas operativos utilizan el bloqueo obligatorio todo el tiempo (especialmente el sistema operativo Windows de Microsoft). Esto dejará de jugar hasta que esté completamente descargado, también le impedirá cambiar el nombre de un archivo o directorio que esté abierto (en el que se encuentra una aplicación). Pero en Unix está bien. Si una aplicación necesita bloqueo, puede usarla. Pero normalmente no.
fuente