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 を指定することで様々な セマフォ制御を行います。
以下の cmd は semid および semnum で指定するセマフォに関して実行 されます。
GETVAL semval の値を返す ( intro(2) 参照)。 {READ}
SETVAL semval の値を arg.val に設定する。 {ALTER} この cmd の実行が成功すると、 全プロセス内の指定セマフォ に対応する semadj の値が消去されます。
GETPID sempid の値を返す。 {READ}
GETNCNT semncnt の値を返す。 {READ}
GETZCNT semzcnt の値を返す。 {READ}
以下の cmd はそれぞれセマフォのセット の各 semval を返し、 設定する。
GETALL arg.array によって指定する 配列に semval を出力する。 {READ}
SETALL arg.array によって指定する配列に semval を設定する。 {ALTER} この cmd の実行が成功し、 全プロセス内の各指定セマフォ に対応する semadj の値が消去されるとき。
以下の cmd も指定可能です。
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 の値
その他 0 の値
失敗した場合、 −1 が返され、 errno が設定されます。
関連事項
intro(2), semget(2V), semop(2V).
NEWS-OSRelease 4.2.1R