Next: , Previous: , Up: Files   [Contents][Index]


24.5 ファイルのロック

2人のユーザーが同時に同じファイルを編集する際、おそらく彼らは互いに干渉しあうことになるでしょう。Emacsはファイルが変更される際にファイルロック(file lock)を記録することによって、このような状況の発生を防ぎます。そしてEmacsは他のEmacsジョブにロックされているファイルをvisitしているバッファーへの変更の最初の試みを検知して、ユーザーに何を行うか尋ねます。このファイルロックの実態は、編集中のファイルと同じディレクトリーに格納される特別な名前をもつシンボリックリンクです(シンボリックリンクをサポートしないファイルシステムでは通常ファイルが使用される)。

ファイルのアクセスにNFSを使用する際には、可能性は小さいものの、他のユーザーと同じファイルを“同時”にロックするかもしれません。これが発生した場合、2人のユーザーが同時にファイルを変更することが可能になりますが、それでもEmacsは2番目に保存するユーザーにたいして警告を発するでしょう。たファイルをvisitしているバッファーで、ディスク上でファイル変更の検知により、ある種の同時編集を捕捉できます。Modification Timeを参照してください。

Function: file-locked-p filename

この関数はファイルfilenameがロックされていなければnilをリターンする。このEmacsプロセスによりロックされていればt、他のEmacsジョブによりロックされている場合はロックしたユーザーの名前をリターンする。

(file-locked-p "foo")
     ⇒ nil
Function: lock-buffer &optional filename

この関数は、カレントバッファーが変更されている場合は、ファイルfilenameをロックする。引数filenameのデフォルトは、カレントバッファーがvisitしているファイルである。カレントバッファーがファイルをvisitしていない、またはバッファーが変更されていない、またはシステムがロックをサポートしない場合は、何もしない。

Function: unlock-buffer

この関数は、カレントバッファーが変更されている場合は、バッファーによりvisitされているファイルをアンロックする。バッファーが変更されていない場合は、そのファイルはロックされてはならないので、この関数は何もしない。カレントバッファーがファイルをvisitしていない、またはシステムがロックをサポートしない場合、この関数は何もしない。

User Option: create-lockfiles

この変数がnilならEmacsはファイルをロックしない。

Function: ask-user-about-lock file other-user

この関数はユーザーがfileの変更を試みたが、それが名前other-userのユーザーにロックされていたとき呼び出される。この関数のデフォルト定義は何を行うかユーザーに尋ねる関数。この関数がリターンする値はEmacsが次に何を行うかを決定する:

望むなら他の方法で判定を行う独自バージョンでask-user-about-lock関数を置き換えることができる。