semget(2) は、セマフォーの初期化またはセマフォーへのアクセスを行います。呼び出しが成功すると、セマフォー ID (semid) を返します。key 引数は、セマフォー ID に関連付けられた値です。nsems 引数は、セマフォー配列内の要素数を指定します。nsems が既存の配列の要素数を超えると呼び出しは失敗します。正しい数がわからない場合は、nsems 引数を 0 に指定すると正しく実行されます。semflg 引数は、初期状態のアクセス権と作成の制御フラグを指定します。
SEMMNI システム構成オプションは、配列内のセマフォーの最大数を指定します。SEMMNS オプションは、すべてのセマフォーのセットを通じて個々のセマフォーの最大数を指定します。ただし、セマフォーのセット間の断片化のため、利用できるすべてのセマフォーを割り当てられない場合もあります。
次のコードに、semget(2) の使用例を示します。
#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> ... key_t key; /* key to pass to semget() */ int semflg; /* semflg to pass to semget() */ int nsems; /* nsems to pass to semget() */ int semid; /* return value from semget() */ ... key = ... nsems = ... semflg = ... ... if ((semid = semget(key, nsems, semflg)) == –1) { perror("semget: semget failed"); exit(1); } else exit(0); ...