请注意,这不是File r/w locking 和 unlink的重复。(区别-平台。文件的锁定和删除等操作具有完全不同的语义,因此结果会有所不同)。
我有以下问题。我想创建一个基于文件系统的会话存储,其中每个会话数据都存储在以会话 ID 命名的简单文件中。
我想要以下 API: write(sid,data,timeout)
, read(sid,data,timeout)
, remove(sid)
where sid==file name, 另外我想要某种可以删除所有超时会话的 GC。
如果您使用单个进程,则任务非常简单,但在使用多个进程甚至共享文件夹时绝对不是微不足道的。
我想到的最简单的解决方案是:
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)
但是 AFIAK 我不能调用DeleteFile
打开的锁定文件(不像在 Unix 中文件锁定不是强制性的,并且打开的文件允许取消链接。
但是如果我把DeleteFile
锁定循环之外的情况可能会发生
GC - CreateFile/LockFile/Unlock/CloseHandle,
write - oCreateFile/LockFile/WriteUpdatedData/Unlock/CloseHandle
GC - DeleteFile
有人知道如何解决此类问题吗?是否有任何技巧可以结合文件锁定和文件删除或对文件原子(Win32)进行操作?
笔记:
- 我不想使用数据库,
- 我正在寻找适用于 NT 5.01 及更高版本的 Win32 API 的解决方案
谢谢。