ファイルr/wロック、リンクを解除
-
19-09-2019 - |
質問
以下のような問題です。作りたいファイルシステムセッションストレージの各セッションデータを保存することができ簡単という名前のファイルとセッションidを持っています。
いたい以下のAPI: write(sid,data,timeout)
, read(sid,data,timeout)
, remove(sid)
がsid==ファイル名、または何らかのGCを削除することがすべてのタが入ってこないます。
なかなか簡単に行えば作業工程が若野は自明な場合、複数のプロセスやNFS over.
最も単純な解決というものを考えたとおり:
write/read:
fd=open(file_name,O_CREAT | O_RDWR); // create a new file or use exsting
fcntl_lock_file(fd)
save data to fd/read data from fd
fcntl_unlock_file(fd)
close(fd)
GC:
fd=open(file_name,O_RDWR);
fcntl_lock_file(fd)
if(timed_out)
unlink(file_name)
fcntl_unlock_file(fd)
close(fd)
最大の問題としてファイルの削除作業ファイル名、ファイルのロックの作業ファイル 記述子.うものではない以下のシナリオ:
GC - open,
write - open
GC - lock, unlink, unlock, close // file still exists because held by write
write - lock, write, unlock, close // file removed
は誰もいい、という考えにどのような課題ことで解消される可能性があり?ある方々に支持してもらえればと思いき をファイルのロックおよびファイルを削除を操作ファイルの原子?
注記:
- んを利用したいデータベース
- 私は、解決のためのUnix
- 解決すべき標準的なPOSIXのようなfcnl、open、close、リンクを解除
感謝。
Clearification の大きな課題の操作ファイル名のリンクを解除)すべき原子の操作ファイル記述子--ロック:
- 開放リンクを解除--作業ファイル
- fnctl--作業を記述子
解決
ないこと。
write/read:
fd=open(file_name,O_CREAT | O_RDWR); // create a new file or use exsting
fcntl_lock_file(fd)
if stat(file_name).{st_dev, st_ino} != fstat(fd).{st_dev, st_ino}
unlock, close, retry
save data to fd/read data from fd
fcntl_unlock_file(fd)
close(fd)
の場合 stat
失敗したとEEXIST(ファイル名が存在しない)または、現在のファイルと同じではないので、保釈.
所属していません StackOverflow