2017-04-09 9 views
0

J'écris un programme pour changer un fichier en place. La sémantique que je veux est que l'ancienne version devrait rester sur le système de fichiers jusqu'à ce que la nouvelle version ait été écrite. Autrement dit, la transition entre l'ancienne et la nouvelle version devrait se faire de manière atomique. Quelle est la bonne façon de faire cela sur Linux ou, de préférence, sur n'importe quel système POSIX?Édition sur place d'un fichier

Répondre

3

La manière canonique de le faire atomiquement est de créer un fichier temporaire, et lorsque vous avez terminé, vous le déplacez pour écraser le fichier original. Ensuite, vous entrez dans un autre domaine de problèmes. Jetez un oeil à ce Is rename() without fsync() safe?

0

Ecrivez le nouveau fichier sous un nom différent, puis appelez le rename.

0

Je suis en train d'écrire un programme pour changer un fichier en place

Le programme déjà existant est patch.

Run diff -[option] old-file new-file >> name.patch

par exemple diff -Naur old-file new-file >> name.patch

... et utilisez la commande patch pour modifier le fichier, comme patch -p0 < name.patch