2011-01-11 5 views
0

Avec la prise en charge des listes de contrôle d'accès dans Mac OS X, il existe un moyen de déclarer un fichier accessible en écriture mais non effaçable.Un renommage atomique est-il possible dans Mac VFS/HFS +?

Cela pose un problème avec les écritures atomiques, puisque le current implementation de rename dans VFS delete est une cible préexistante. Si vous avez un fichier existant, vous disposez des droits d'écriture sur, il est possible d'être incapable d'écrire atomiquement à:
attach simplement une ACL qui indique deny delete et une écriture atomique (comme mis en œuvre par différentes API Cocoa - par exemple NSArray's writeToFile:atomically:) échouera, tandis qu'une écriture non-atomique réussira heureusement. Puisque ma compréhension du code C de bas niveau est assez limitée:
Est-ce qu'une implémentation alternative est faisable avec seulement des maux de tête mineurs (insérez votre définition préférée de "mineur")?

Merci

Daniel

Répondre

1

Une alternative viable semble créer le fichier dans un répertoire temporaire, puis appelez exchangedata sur les deux fichiers. HFS exporte l'attribut VOL_CAP_INT_EXCHANGEDATA, cela devrait donc fonctionner. Les vérifications pertinentes dans vfs_syscalls.c indiquent que seules les autorisations de lecture et d'écriture sont nécessaires à la réussite de l'appel.

+0

Nice! Je ne savais pas à propos de 'exchangedata' ... – danyowdee