スポンサーリンク

UUCPLOCK(3) FreeBSD ライブラリ関数マニュアル UUCPLOCK(3)

名称

uu_lock, uu_unlock, uu_lockerr − シリアルデバイスの制御権の取得および放棄

ライブラリ

システムユーティリティライブラリ (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: 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) についての解説を参照してく ださい。

関連項目

lseek(2), open(2), read(2), write(2)

バグ

失効ロックを残したプログラムと同じプロセス ID が新しいプロセスに割り当て られた場合は、失効したロックが失効を認識されない可能性があります。

呼び出しプロセスは、 /var/spool/lock ディレクトリに対する書込み許可を持っ ていなければなりません。このディレクトリの許可がロックされるシリアルデバ イスの許可と同じであることを保証する仕組みは備えていません。

FreeBSD 10.0 March 30, 1997 FreeBSD 10.0

スポンサーリンク