Question

La stratégie générale pour le verrouillage de fichier amplification (file_locks partageables et scope), et le verrouillage de fichiers en général, je pense, est la suivante:

  1. ouvert
  2. serrure
  3. fonctionner sur le contenu du fichier
  4. déverrouiller
  5. fermer le fichier

Cependant, je vais ouvrir le fichier pour append et que vous souhaitez appeler tellp pour voir où je suis. Est-ce sans danger dans le scénario ci-dessus? Ne sera pas le pointeur de fichier soit défini dès que le fichier est ouvert avant la serrure et donc potentiellement pas protégé? Si oui, est-il un langage standard pour contourner cela?

Était-ce utile?

La solution

Cela peut être l'environnement spécifique, mais sur la plupart des plates-formes:

Lorsqu'un fichier est ouvert pour l'ajout le pointeur de fichier est réglé immédiatement avant chaque écriture. Donc, si vous utilisez tellp avant de verrouiller le fichier, il ne pourrait pas vous dire où vos octets nouvellement annexés vont aller, mais vous ne devriez pas avoir deux processus à l'aide de blocage en quelque sorte toujours la même annexant plage d'octets.

Autres conseils

Je recommande une bonne documentation boost: http: //www.boost .org / doc / libs / 1_45_0 / doc / html / interprocessus / synchronization_mechanisms.html # interprocess.synchronization_mechanisms.file_lock

Dans lequel vous pouvez lire:

  • verrouillages de fichiers ne fonctionnent pas serrures du système, même si les supports du système d'exploitation il (par exemple Windows oui, Unix généralement pas), donc si vous verrouiller le fichier, tout le monde peut lire / écrire / supprimer, sauf si un autre processus utilise même fichier Mécanisme de verrouillage. Pensez donc à ce sujet plus comme mutex interprocessus plutôt que les verrous de fichier réel.
  • verrous de fichier sont pour la synchronisation entre processus, ils ne sont pas synchronisées à l'intérieur de plusieurs threads processus
  • ne pas oublier le rinçage (flush de ofstream), de sorte que vous n'avez pas à vous soucier de mémoire tampon

Oh, c'est tout simplement horrible ... Je voulais aider, je le code écrit exemple, essayer et ... au verrouillage fichier 1_44 est cassé pour win32, rinçage ne fonctionne pas sur le fichier verrouillé.

Désolé, pas de ma faute.

Si elle aide, en théorie: si vous ouvrez le fichier pour annexant, cela signifie automatiquement cherchant à mettre fin avant chaque opération d'écriture. Il ne vous empêche pas de chercher manuellement mettre fin à chaque fois que vous voulez - même sans écriture. Cependant, l'expérience (voir ci-dessus) dit:. Rester à l'écart des choses brisées

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top