Pelo que entendi, quando um arquivo está sendo gravado, o processo de gravação no arquivo obtém um bloqueio exclusivo. Portanto, outros processos não podem acessar este arquivo para leitura.
Com o conhecimento acima, não consigo entender como reproduzir um vídeo no media player, quando o navegador ainda está fazendo o download.
Respostas:
Sua compreensão está errada. Vários processos Linux podem gravar no mesmo arquivo de uma só vez (e o que acontece então pode ser não especificado, exceto quando os processos substituem diferentes segmentos desse arquivo). E algum outro processo Linux (por exemplo, seu navegador) pode ler um arquivo para o qual está gravado .
Você pode adotar uma convenção para evitar isso . Por exemplo, você pode usar o bloqueio de arquivo consultivo (adotando a convenção de que todo programa relevante deve fazer isso), por exemplo, com flock (2) , lockf (3) , etc. convenções) para acessar (ou mesmo gravar) esse arquivo. Você pode usar máquinas de permissão (por exemplo, dedicando um usuário do sistema ao seu programa setuid ).
Veja também as respostas this & that no StackOverflow (alguns deles mencionaram os mecanismos específicos do Linux de bloqueio obrigatório obsoleto ). Leia sobre as propriedades do ACID , considere usar algum banco de dados ( sqlite , PostGreSQL , MongoDB , etc ...) ou algum arquivo indexado ( gdbm ).
Não conheço o Windows, mas ouvi o boato de que ele não permite acesso simultâneo ou grava no mesmo arquivo.
fonte
Os arquivos geralmente não estão bloqueados - bloqueio de arquivo unix . Também é bastante comum ter vários leitores de arquivo, mas apenas um escritor. Os problemas ocorrem apenas quando você tem vários gravadores.
Além disso, a maioria dos formatos de arquivo de vídeos (e especialmente na Web) é adaptável, o que significa que você não precisa ter o vídeo inteiro para reproduzi-lo.
fonte
Os sistemas operacionais Unix não usam bloqueio obrigatório (o Gnu / Linux é um Unix, outros exemplos são UNIX, BSD, Mac OSX). Bloqueio como evitado sempre que possível.
Alguns outros sistemas operacionais usam o bloqueio obrigatório o tempo todo (principalmente o sistema operacional Windows da Microsoft). Isso impedirá a reprodução até o download completo, além de renomear um arquivo ou diretório que está aberto (em que um aplicativo está). Mas no Unix está tudo bem. Se um aplicativo precisar ser bloqueado, ele poderá ser usado. Mas não normalmente.
fonte