semctl(2) は、セマフォーのセットのアクセス権とその他の特性を変更します。semctl(2) では、有効なセマフォー ID を指定して呼び出してください。semnum 値は、そのインデックスによって配列内のセマフォーを選択します。cmd 引数は、次のいずれかの制御フラグです。
単一セマフォーの値を戻します。
単一セマフォーの値を設定します。この場合、arg は int 値の arg.val と解釈されます。
セマフォーまたは配列に対して最後に操作を実行したプロセスの PID を戻します。
セマフォーの値が増加するのを待っているプロセス数を戻します。
特定のセマフォーの値が 0 に達するのを待っているプロセス数を戻します。
セット内のすべてのセマフォーの値を戻します。この場合、arg は unsigned short 値の配列へのポインタである arg.array と解釈されます。
セット内のすべてのセマフォーに値を設定します。この場合、arg は unsigned short 値の配列へのポインタである arg.array と解釈されます。
制御構造体からセマフォーのセットの状態情報を取得し、semid_ds 型のバッファーへのポインタ arg.buf が指すデータ構造体に入れます。
有効なユーザーおよびグループの識別子とアクセス権を設定します。この場合、arg は arg.buf と解釈されます。
指定したセマフォーのセットを削除します。
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); ...