【发布时间】:2009-12-19 14:05:52
【问题描述】:
请注意,这不是 File r/w locking and unlink 的重复。 (区别——平台。文件的锁定和删除等操作的语义完全不同,因此结果会有所不同。
我有以下问题。我想创建一个基于文件系统的会话存储,其中每个会话数据都存储在以会话 ID 命名的简单文件中。
我想要以下 API:write(sid,data,timeout)、read(sid,data,timeout)、remove(sid)
其中 sid== 文件名,另外我想要某种可以删除所有超时会话的 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 的解决方案
谢谢。
【问题讨论】:
-
对我来说当然是个骗子。请解释差异,否则很可能会被关闭。
-
添加解释——POSIX 和 Win32 需要完全不同的解决方案
标签: winapi file-locking