2012-03-19 3 views
3

http://code.google.com/p/guava-libraries/issues/detail?id=365 traite des conditions de concurrence potentielles qui peuvent survenir lors de la suppression récursive d'un répertoire.Supprimer un répertoire sous Windows sans courir?

Selon http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7148952 cela peut être mis en œuvre sans course sous Linux en utilisant openat(). Existe-t-il un mécanisme équivalent sous Windows?

+0

http://en.wikipedia.org/wiki/Transactional_NTFS pourrait aider. –

+0

Est-ce que Boost cause des courses? – Mikhail

+0

@ ta.speot.is: S'il vous plaît poster une réponse formelle afin que je puisse commenter plus en détail. – Gili

Répondre

0

Une différence essentielle entre le comportement du système de fichiers Windows et le comportement du système de fichiers Linux réside dans le verrouillage et le comptage des références.

Dans Windows si un processus a un fichier ouvert, alors ce fichier et le chemin menant à ce fichier sont protégés. Donc, si quelqu'un a ouvert "C: \ a \ b \ c \ d \ fichier.txt", personne n'est autorisé à renommer ou supprimer une partie du chemin "C: \ a \ b \ c \ d \ fichier.txt ".

Le modèle linux est très différent, n'importe quelle partie de ce chemin peut être modifiée et même le fichier peut être supprimé. Le processus contenant le handle de "file.txt" a toujours une référence et le fichier ne sera pas supprimé du système de fichiers tant que tous les handles ne seront pas fermés. L'API Win32 n'expose pas un moyen direct de contenir un descripteur dans un répertoire (bien qu'il existe des API pour cela - voir les fonctions "Zw", FindFirstFile, je ne suis pas sûr, les API de sauvegarde, etc.) - mais votre processus "répertoire courant" contient un descripteur pour ce répertoire. Ainsi, vous pouvez obtenir un comportement "openat" en changeant votre répertoire de travail et en ouvrant le fichier directement. Il serait préférable d'utiliser quelque chose comme ZwCreateFile() pour ouvrir un descripteur dans le répertoire - puisque le "répertoire courant" est un processus global.

Recherchez les informations Stackoverflow et Microsoft.com pour ZwCreateFile.

+0

Sons prometteurs. Merci! – Gili

Questions connexes