UUCPLOCK(3) FreeBSD ライブラリ関数マニュアル UUCPLOCK(3)
名称
uu_lock, uu_unlock, uu_lockerr − シリアルデバイスの制御権の取得および放棄 |
ライブラリ
システムユーティリティライブラリ (libutil, −lutil) |
書式
#include <sys/types.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: write(2) の呼び出しによって、現在のプロセス ID をロッ クファイルに書込むことができません。 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: 現在のプロセスは、指定されたデバイスについてのロックを すでに持ってはいません。 write(2) の呼び出しによっては、新しいプロセス ID をロックファイルに書込む ことができません。 |
エラー
uu_lock() 関数が上のエラー値のいずれかを返した場合は、グローバル値 errno を使ってその理由を判断することができます。詳しくは、該当するマニュアル ページを参照してください。 uu_unlock() 関数は、ロックファイルが削除できなかった理由を示すグローバル 変数 errno を設定します。詳しくは、 unlink(2) についての解説を参照してく ださい。 |
関連項目
バグ
失効ロックを残したプログラムと同じプロセス ID が新しいプロセスに割り当て られた場合は、失効したロックが失効を認識されない可能性があります。 呼び出しプロセスは、 /var/spool/lock ディレクトリに対する書込み許可を持っ ていなければなりません。このディレクトリの許可がロックされるシリアルデバ イスの許可と同じであることを保証する仕組みは備えていません。 FreeBSD 10.0 March 30, 1997 FreeBSD 10.0 |