SEMCTL(2V) — NEWS-OS Programmer’s Manual
名称
semctl − セマフォアの制御
形式
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semctl (semid, semnum, cmd, arg)
int semid, cmd;
int semnum;
union semun {
int val;
struct semid_ds ∗buf;
ushort ∗array;
} arg;
解説
Semctl は cmd を指定することで様々な セマフォア制御を行います。
以下の cmds は semid および semnum で指定するセマフォアに関して実行 されます。
GETVAL semvalの値を返す ( intro(2) 参照)。 {READ}
SETVAL semvalの値を arg.val に設定する。 {ALTER} このcmdの実行が成功すると、 全プロセス内の指定セマフォア に対応する semadjの値が消去されます。
GETPID sempid の値を返す。 {READ}
GETNCNT semncnt の値を返す。 {READ}
GETZCNT semzcnt の値を返す。 {READ}
以下の cmds はそれぞれセマフォアのセット の各semvalを返し、 設定する。
GETALL arg.array によって指定する 配列にsemval を出力する。 {READ}
SETALL arg.array によって指定する配列に semvalsを設定する。 {ALTER} このcmdの実行が成功し、 全プロセス内の各指定セマフォア に対応するsemadjの値が消去されるとき。
以下の cmds も指定可能です。
IPC_STAT semid に関連するデータ構造体の各 メンバーのカレントの値を arg.buf で指定する構造体に置き換える。 この構造体の内容は intro(2) で定義されます。 {READ}
IPC_SET semid に関連するデータ構造体の以下の各 メンバーの値を arg.buf で示す構造体の対応する値に置き換える。
sem_perm.uid
sem_perm.gid
sem_perm.mode /∗ only low 9 bits ∗/
このcmd はスーパーユーザの ID または semid に関連するデータ構造体の sem_perm.uid の値に一致する有効ユーザ ID を持つプロセスによってのみ 実行できる。
IPC_RMID semid で示すセマフォア識別子を システムから取り除き、 セマフォアと関連するデータ構造体を 破壊する。 このcmd はスーパーユーザの ID または semid に関連するデータ構造体の sem_perm.uid の値に一致する有効ユーザ ID を持つプロセスによってのみ 実行できる。
Semctl は以下の内容の内1つでも該当する場合、 失敗します。
[EINVAL] Semid が有効なセマフォア識別子でない。
[EINVAL] Semnum の値が ゼロ以下または sem_nsems よりも大きい。
[EINVAL] Cmd が有効でない。
[EACCES] 動作許可が呼び出しプロセス に対して否定された ( intro(2) 参照)。
[ERANGE] Cmd が SETVAL または SETALL となり、 semvalが設定される値 システムに許される最大値以上である。
[EPERM] Cmd が IPC_RMID または IPC_SET と同一であり、 呼び出しプロセスの有効 ユーザ ID がスーパーユーザの ID と同一でなく、 また semid に関連するデータ構造体の sem_perm.uid の値とも同一でない。
[EFAULT] Arg.buf が不正アドレスを示している。
リターン値
コマンドの実行に成功すると、 cmd によって以下のような値が返されます。
GETVAL semvalの値。
GETPID sempidの値。
GETNCNT semncntの値。
GETZCNT semzcntの値。
All others 0の値。
失敗した場合、 −1 が返され、 errno が設定されます。
関連事項
intro(2), semget(2V), semop(2V).
NEWS-OSRelease 4.1C