Veuillez noter qu'il ne s'agit pas d'un doublon de File r/w locking and unlink. (La différence - plate-forme.Les opérations de fichiers comme le verrouillage et la suppression ont une sémantique totalement différente, ainsi la différence serait différente).Déverrouillage et suppression de fichier en tant qu'opération unique
J'ai un problème suivant. Je veux créer un stockage de session basé sur le système de fichiers où chaque donnée de session est stockée dans un fichier simple nommé avec des identifiants de session.
Je veux API suivante: write(sid,data,timeout)
, read(sid,data,timeout)
, remove(sid)
où le nom du fichier sid ==, je veux aussi avoir une sorte de GC qui peuvent enlever toutes les sessions délai d'attente dépassé.
Tâche très simple si vous travaillez avec un seul processus mais absolument pas trivial lorsque vous travaillez avec plusieurs processus ou même sur des dossiers partagés.
La solution que je pensais plus simple au sujet était:
write/read:
hanlde=CreateFile
LockFile(handle)
read/write data
UnlockFile(handle)
CloseHanlde(handle)
GC (for each file in directory)
hanlde=CreateFile
LockFile(handle)
check if timeout occured
DeleteFile
UnlockFile(handle)
CloseHanlde(handle)
Mais AFIAK je ne peux pas appeler DeleteFile
le fichier verrouillé opended (contrairement à Unix où le verrouillage des fichiers est pas obligatoire et supprimer le lien est autorisé pour les fichiers ouverts.
Mais si je mets mauvais scénario DeleteFile
en dehors de la boucle de verrouillage peut se produire
GC - CreateFile/LockFile/Unlock/CloseHandle,
write - oCreateFile/LockFile/WriteUpdatedData/Unlock/CloseHandle
GC - DeleteFile
Quelqu'un a-t-il une idée de comment un tel problème peut être résolu? Y a-t-il des astuces qui permettent de combiner le verrouillage et la suppression du fichier ou de faire une opération sur le fichier atomique (Win32)?
Notes:
- Je ne veux pas utiliser la base de données,
- je cherche une solution pour Win32 API pour NT 5.01 et au-dessus
Merci.
Certainement ressemble à une dupe pour moi. S'il vous plaît expliquer les différences, ou il peut très bien être fermé. –
Ajout explenation - POSIX et Win32 requis solutions totalement différentes – Artyom