プログラミングインタフェース

セマフォの制御

semctl(2) は、セマフォのセットのアクセス権とその他の特性を変更します。semctl(2) では、有効なセマフォ ID を指定して呼び出してください。semnum 値は、そのインデックスによって配列内のセマフォを選択します。cmd 引数は、次のいずれかの制御フラグです。

GETVAL

単一セマフォの値を戻す

SETVAL

単一セマフォの値を設定する。この場合、argint 値の arg.val と解釈される

GETPID

セマフォまたは配列に対して最後に操作を実行したプロセスの PID を戻す

GETNCNT

セマフォの値が増加するのを待っているプロセス数を戻す

GETZCNT

特定のセマフォの値が 0 に達するのを待っているプロセス数を戻す

GETALL

セット内のすべてのセマフォの値を戻す。この場合、arg unsigned short 値の配列へのポインタである arg.array と解釈される

SETALL

セット内のすべてのセマフォに値を設定する。この場合、arg unsigned short 値の配列へのポインタである arg.array と解釈される

IPC_STAT

制御構造体からセマフォのセットの状態情報を取得し、semid_ds 型のバッファーへのポインタ arg.buf が指すデータ構造体に入れる

IPC_SET

有効なユーザーおよびグループの識別子とアクセス権を設定する。この場合、argarg.buf と解釈される

IPC_RMID

指定したセマフォのセットを削除する

IPC_SET または IPC_RMID コマンドを実行するには、所有者、作成者、またはスーパーユーザーとして有効なユーザー識別子を持つ必要があります。その他の制御コマンドには、読み取り権と書き込み権が必要です。

次のコードに、semctl(2) の使用例を示します。


#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
...
 	register int				i;
 ...
 	i = semctl(semid, semnum, cmd, arg);
 	if (i == –1) {
 		perror("semctl: semctl failed");
 		exit(1);
...