UUCPLOCK(3) | FreeBSD Library Functions Manual | UUCPLOCK(3) |
名称
uu_lock, uu_unlock, uu_lockerr — シリアルデバイスの制御を取得および解放するライブラリ
System Utilities Library (libutil, -lutil)書式
#include < sys/types.h>#include < libutil.h>
int
uu_lock( const char *ttyname);
int
uu_lock_txfr( const char *ttyname, pid_t pid);
int
uu_unlock( const char *ttyname);
const char *
uu_lockerr( int uu_lockresult);
解説
uu_lock() 関数は、渡された ttyname により与えられる接尾辞を持つ /var/spool/lock/LCK.. という名前のロックファイルを作成しようと試みます。そのファイルがすでに存在する場合は、ロックするプログラムのプロセス ID が含まれているはずです。ファイルがまだ存在していないか、またはロックファイルの中のプロセス ID により与えられる所有者のプロセスがもはや走っていない場合は、 uu_lock() 関数はファイルに自身のプロセス ID を書き込んで、成功で戻ります。
uu_lock_txfr() 関数は、別のプロセスにロック所有権を転送します。 uu_lock() 関数がその前に成功していなければなりません。
uu_unlock() 関数は、与えられた ttyname で uu_lock() によって作成されたロックファイルを削除します。 uu_unlock() を呼び出す前には、 uu_lock() が成功していなければならないことに注意してください。
uu_lockerr() 関数は、 uu_lock() から返されたエラー uu_lockresult を表現するエラー文字列を返します。
戻り値
uu_unlock() 関数は、成功すると 0、失敗すると -1 を返します。uu_lock() 関数は、次のいずれかの値を返します。
UU_LOCK_INUSE: ロックは別のプロセスによって使われています。
UU_LOCK_OK: ロックの作成に成功しました。
UU_LOCK_OPEN_ERR: ロックファイルは open(2) でオープンできません。
UU_LOCK_READ_ERR: ロックファイルは read(2) で読み込むことができません。
UU_LOCK_CREAT_ERR: creat(2) で、一時ロックファイルを作成することができません。
UU_LOCK_WRITE_ERR: 現在のプロセス ID を write(2) の呼び出しでロックファイルに書き込むことができません。
UU_LOCK_LINK_ERR: link(2) で、一時ロックファイルをリンクすることができません。
UU_LOCK_TRY_ERR: ロックする試みは、5 回の試行の後に失敗しました。
UU_LOCK_OK の値が uu_lockerr() に渡された場合は、空の文字列が返されます。それ以外の場合は、失敗した理由を明記した文字列が返されます。 uu_lockerr() は、正確なエラーを決定するために、現在の errno の値を使用します。 uu_lock() を呼び出してから uu_lockerr() を呼び出すまでの間に errno が変更されないように注意するべきです。
uu_lock_txfr() は、次のいずれかの値を返します。
UU_LOCK_OK: 転送は成功しました。指定されたプロセスは現在デバイスロックを保持しています。
UU_LOCK_OWNER_ERR: 現在のプロセスは、指定されたデバイスのロックをまだ所有していません。
UU_LOCK_WRITE_ERR: 新しいプロセス ID を write(2) の呼び出しでロックファイルに書き込むことができません。
エラー
uu_lock() が上のエラー値のいずれかを返した場合は、グローバル値 errno は、理由を決定するために使用できます。詳細については、それぞれのマニュアルページを参照してください。uu_unlock() 関数は、ロックファイルが削除できなかった理由を示すためにグローバル変数 errno を設定します。詳細については、 unlink(2) の解説を参照してください。
バグ
新しいプロセスが古いロックファイルを残したプログラムと同じプロセス ID が割り当てられた場合、古くなったロックが認識されない可能性があります。呼び出しプロセスは、 /var/spool/lock ディレクトリに対する書き込み許可を持っていなければなりません。このディレクトリの許可がロックされるかもしれないシリアルデバイスの許可と同じであることを保証する仕組みは備えていません。
March 30, 1997 | FreeBSD |