2012-10-01 4 views
1

On me donne un fichier binaire (considérons le grand) et plusieurs blobs binaires, que je devrais insérer/remplacer quelque part au milieu du fichier (les offsets sont connus).Comment changer le contenu du fichier automatiquement?

Le même utilisateur peut accéder au fichier, donc je dois avoir "tout de rien", soit l'utilisateur a une ancienne version du fichier si elle l'ouvre avant que j'ai tout mis à jour, ou elle a une nouvelle version si j'ai réussi.

Je suis intéressant dans les solutions pour Linux, Windows et OS X. Bien sûr, la mise en œuvre peut être différente.

+0

Votre question est un peu rare dans les détails. Comment ouvrez-vous le fichier? Créez-vous une application? Lorsque le fichier est ouvert, est-ce toujours via notre application? Quelle langue utilisez-vous? –

+0

Oui, je crée une application. Je suppose que le langage spécifique n'a pas d'importance, alors considérons C++. Mon application sait si quelqu'un ouvre le fichier via inotify/WinAPI. – galadog

+0

Voir: http://stackoverflow.com/questions/4662115/is-an-atomic-rename-possible-in-mac-vfs-hfs et http://stackoverflow.com/a/660679/371250 – ninjalj

Répondre

0

Pour Linux:

  • Est-ce que tout sur un fichier temporaire.
  • fsync() le fichier temporaire.
  • rename() le fichier temporaire dans le fichier réel.

Cet idiome est connu sous le nom de renom atomique.

+0

Ceci est un solution simple, mais il faut au moins deux fois plus d'espace pour un fichier temporaire. – galadog

Questions connexes