#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <string.h>
int main(char** argv, int argc)
{
try
{
/* セマフォキー値 OSで一意の値です */
long lnSemKey = 0x0000ffff;
errno=0;
/* セマフォ生成 */
int iSemId = semget(lnSemKey,1,(0666|IPC_CREAT|IPC_EXCL));
if(iSemId < 0)
{
throw -1;
}
/* セマフォ構造体 */
union semun
{
int val;
struct semid_ds *buf;
ushort *array;
}arg;
//初期セマフォ数の設定
arg.val = 1;
errno=0;
if((semctl(iSemId,0,SETVAL,arg)) < 0)
{
throw -1;
}
}
catch(int r)
{
return(r);
}
return(0);
}
実行して、ipcsコマンドで確認しますと、↓になります。keyが0x0000ffffのセマフォを生成しました。
[root@localhost ttt]# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x4d0014cc 0 work 600 8
0x00000000 65537 nobody 600 1
0x00000000 98306 nobody 600 1
0x00000000 131075 nobody 600 1
0x0000ffff 163844 root 666 1