Next: Information about Files, Previous: Writing to Files, Up: Files [Contents][Index]
2人のユーザーが同時に同じファイルを編集する際、おそらく彼らは互いに干渉しあうでしょう。Emacsは、ファイルが変更される際にファイルロック(file lock)を記録することにより、このような状況の発生を防ぎます。そして、Emacsは他のEmacsジョブにロックされているファイルをvisitしているバッファーへの変更の最初の試みを検知して、ユーザーに何を行うか尋ねます。このファイルロックの実態は、編集中のファイルと同じディレクトリーに格納される、特別な名前をもつシンボリックリンクです(シンボリックリンクをサポートしないファイルシステムでは、通常のファイルが使用される)。
ファイルのアクセスにNFSを使用する際には、可能性は小さいものの、他のユーザーと同じファイルを“同時”にロックするかもしれません。これが発生した場合、2人のユーザーが同時にファイルを変更することが可能になりますが、それでもEmacsは2番目に保存するユーザーにたいして警告を発するでしょう。たファイルをvisitしているバッファーで、ディスク上でファイル変更の検知により、ある種の同時編集を捕捉できます。Modification Timeを参照してください。
この関数は、ファイルfilenameがロックされていなければnil
をリターンする。このEmacsプロセスによりロックされている場合はt
をリターンし、他のEmacsジョブによりロックされている場合はロックしたユーザーの名前をリターンする。
(file-locked-p "foo") ⇒ nil
この関数は、カレントバッファーが変更されている場合は、ファイルfilenameをロックする。引数filenameのデフォルトは、カレントバッファーがvisitしているファイルである。カレントバッファーがファイルをvisitしていない、またはバッファーが変更されていない、またはシステムがロックをサポートしない場合は、何もしない。
この関数は、カレントバッファーが変更されている場合は、バッファーによりvisitされているファイルをアンロックする。バッファーが変更されていない場合は、そのファイルはロックされてはならないので、この関数は何もしない。カレントバッファーがファイルをvisitしていない、またはシステムがロックをサポートしない場合、この関数は何もしない。
この変数がnil
の場合、Emacsはファイルをロックしない。
この関数は、ユーザーがfileの変更を試みたが、それが名前other-userのユーザーにロックされていたとき呼び出される。この関数のデフォルト定義は、何を行うかユーザーに尋ねる関数である。この関数がリターンする値は、Emacsが次に何を行うかを決定する:
t
は、そのファイルのロックを奪うことを意味する。その場合、other-userはロックを失い、このユーザーがファイルを編集することができる。
nil
は、ロックを無視して、とにかくユーザーがファイルを編集できるようにすることを意味する。
file-locked
をシグナルする。この場合、ユーザーが行おうとしていた変更は行われない。
このエラーにたいするエラーメッセージは、以下のようになる:
error→ File is locked: file other-user
ここで、file
はファイル名、other-userはそのファイルのロックを所有するユーザーの名前である。
望むなら、他の方法で判定を行う独自のバージョンで、ask-user-about-lock
関数を置き換えることができる。