web-dev-qa-db-fra.com

Fichier de lecture lors de l'écriture sur Linux

Si je comprends bien, lorsqu'un fichier est écrit, le processus écrit sur le fichier obtient une serrure exclusive. Donc, d'autres processus ne peuvent pas accéder à ce fichier à lire.

Avec les connaissances ci-dessus, je ne peux pas comprendre comment je suis capable de jouer une vidéo dans Media Player, lorsque le navigateur le télécharge toujours.

9
Sorter

Votre compréhension est fausse. Plusieurs processus Linux peuvent écrire sur le même fichier simultanément (et ce qui se passe peut-être alors peut-être non spécifié, sauf lorsque les processus écrasent différents segments de ce fichier). Et un autre processus Linux (par exemple, votre navigateur) peut lire un fichier qui est écrit à .

Vous pouvez adopter a convention Pour éviter cela . Par exemple, vous pouvez utiliser un avis consultatif verrouillage du fichier (adoptant la Convention que chaque programme concerné devrait le faire), par ex. avec FLOCK (2) , Lockf (3) , etc .... mais cela n'interdit pas d'autres processus (ne pas suivre vos conventions) pour accéder (ou même écrire à) ce fichier. Vous pouvez utiliser des machines d'autorisation (par exemple en dédiant un utilisateur système à votre programme SETUID ).

Voir aussi - Ceci & tandis que réponses sur Stackoverflow (certains d'entre eux ont mentionné le déprécié verrouillage obligatoire Mécanismes spécifiques à Linux). Lisez à propos de ACIDE Propriétés, envisagez d'utiliser une base de données ( SQLite , PostgreSQL , MONGODB , etc ...) ou un fichier indexé ( gdbm ).

Je ne connais pas Windows, mais j'ai entendu la rumeur qu'il n'autorise pas l'accès simultané ou écrit au même fichier.

13

Les fichiers ne sont généralement pas verrouillés - verrouillage de fichier UNIX . Il est également assez courant d'avoir plusieurs lecteurs de fichiers mais un seul écrivain. Les problèmes ne se produisent que lorsque vous auriez plusieurs écrivains.

En outre, la plupart des formats de fichiers de vidéos (et en particulier sur le Web) sont réguliers, ce qui signifie que vous n'avez pas besoin d'avoir toute la vidéo pour la jouer.

4
matt.s

Unix OSES n'utilise pas le verrouillage obligatoire (GNU/Linux est un Unix, d'autres exemples sont UNIX, BSD, MAC OSX). Verrouillage comme évité le cas échéant possible.

Certains autres OSES utilisent le verrouillage obligatoire tout le temps (notamment Windows OS) de Microsoft). Cela vous empêchera de jouer jusqu'à téléchargement entièrement téléchargé, cela vous empêchera également de renommer un fichier ou un répertoire ouvert (qu'une application est dans). Mais sur Unix c'est bon. Si une application doit être verrouillée, elle peut l'utiliser. Mais pas normalement.

2
ctrl-alt-delor