これは、ファイルのr/wロックとリンク解除の重複ではないことに注意してください。(違い-プラットフォーム。ロックや削除などのファイルの操作はまったく異なるセマンティクスを持っているため、結果は異なります)。
次の問題があります。各セッションデータがセッション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)で操作したりできるトリックはありますか?
ノート:
- データベースを使いたくない、
- NT5.01以降のWin32APIのソリューションを探しています
ありがとう。