Next: , Previous: Writing to Files, Up: Files


24.5 ファイルロック

2人のユーザーが同時に同じファイルを編集すると、互いに干渉し合います。 Emacsは、ファイルが変更されるとファイルロック(file lock)を 記録することで、このような状況が発生しないように努めます。 すると、Emacsは別のEmacsがロックしているファイルを訪問した バッファを変更しようとする最初の試みを検出でき、 ユーザーにどうすべきかを問い合わせます。

複数の計算機がファイルシステムを共有している場合には、 ファイルロックには完全な信頼性はありません。 ファイルロックが働かないと、 2人のユーザーが同時に変更する可能性がありますが、 それでも、Emacsは2番目に保存したユーザーに警告できます。 また、ディスク上で変更されたファイルを訪問しているバッファの変更を 検出することで、同時編集のある場面を捕捉できます。 Modification Timeを参照してください。

— Function: file-locked-p filename

ファイルfilenameがロックされていなければ、この関数はnilを返す。 このEmacsプロセスがロックしているときにはtを返す。 他のEmacsがロックしている場合には、ロックしているユーザーの名前を返す。

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

この関数は、カレントバッファが変更されていれば ファイルfilenameをロックする。 引数filenameのデフォルトは、 カレントバッファで訪問しているファイルである。 カレントバッファがファイルを訪問していなかったり、 未変更ならばなにもしない。

— Function: unlock-buffer

この関数は、バッファが変更されていれば、 カレントバッファで訪問しているファイルのロックを解除する。 バッファが未変更ならばファイルをロックしていないはずであり、 この関数はなにもしない。 カレントバッファがファイルを訪問していなければ、 やはりなにもしない。

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

この関数は、別のユーザーother-userがロックしている ファイルfileをユーザーが変更しようとしたときに呼び出される。 この関数のデフォルトの定義は、ユーザーになにをすべきか 問い合わせることである。 この関数の戻り値がEmacsのつぎの動作を決定する。

読者は、関数ask-user-about-lockを 別の方法で決定する読者独自のものに置き換えてもよい。 通常の定義に対応したコードはuserlock.elにある。