Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

semget(2V)

semop(2V)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026