semctl

Autres langues

Langue: ja

Version: 2004-11-10 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

semctl - ¥»¥Þ¥Õ¥©¤ÎÀ©¸æÁàºî¤ò¹Ô¤Ê¤¦

½ñ¼°


#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>



int semctl(int semid, int semnum, int cmd, ...);

ÀâÌÀ

semctl() ¤Ï¡¢ semid ¤Ç»ØÄꤵ¤ì¤¿¥»¥Þ¥Õ¥©½¸¹ç (semaphore set) ¤Þ¤¿¤Ï¥»¥Þ¥Õ¥©½¸¹ç¤Î semnun ÈÖÌܤΥ»¥Þ¥Õ¥©¤ËÂФ·¤Æ¡¢ cmd ¤Ç»ØÄꤵ¤ì¤¿À©¸æÁàºî¤ò¹Ô¤Ê¤¦ (½¸¹çÆâ¤Î¥»¥Þ¥Õ¥©¤ÎÈÖ¹æ¤Ï 0 ¤«¤é»Ï¤Þ¤ë)¡£

¤³¤Î´Ø¿ô¤Ï¡¢ cmd ¤ÎÃͤ˰͸¤·¤Æ¡¢3 ¸Ä¤Þ¤¿¤Ï 4 ¸Ä¤Î°ú¤­¿ô¤ò»ý¤Ä¡£ °ú¤­¿ô¤¬ 4 ¸Ä¤Î¾ì¹ç¡¢Âè 4 °ú¤­¿ô¤Î·¿¤Ï union semun ¤Ç¤¢¤ë¡£ ¸Æ¤Ó½Ð¤·¸µ¥×¥í¥°¥é¥à¤Ï¡¢ ¤³¤Î¶¦ÍÑÂÎ (union) ¤ò°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£


union semun {

    int              val;    /* SETVAL ¤ÎÃÍ */

    struct semid_ds *buf;    /* IPC_STAT, IPC_SET ÍѤΥХåե¡ */

    unsigned short  *array;  /* GETALL, SETALL ÍѤÎÇÛÎó */

    struct seminfo  *__buf;  /* IPC_INFO ÍѤΥХåե¡

                                (Linux ¸ÇÍ­) */

};

semid_ds ¥Ç¡¼¥¿¹½Â¤ÂÎ¤Ï <sys/sem.h> ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:




struct semid_ds {

    struct ipc_perm sem_perm;  /* ½êÍ­¸¢¤Èµö²Ä */

    time_t          sem_otime; /* ºÇ¸å¤Î semop ¤Î»þ¹ï */

    time_t          sem_ctime; /* ºÇ¸å¤ËÊѹ¹¤¬¹Ô¤ï¤ì¤¿»þ¹ï */

    unsigned short  sem_nsems; /* ½¸¹çÆâ¤Î¥»¥Þ¥Õ¥©¤Î¿ô */

};

ipc_perm ¹½Â¤ÂÎ¤Ï <sys/ipc.h> ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë (¶¯Ä´¤µ¤ì¤¿¥Õ¥£¡¼¥ë¥É¤Ï IPC_SET ¤ò»È¤Ã¤ÆÀßÄê²Äǽ¤Ç¤¢¤ë):


struct ipc_perm {

    key_t key;            /* semget(2) ¤ËÍ¿¤¨¤é¤ì¤ë¥­¡¼ */

    uid_t uid;            /* ½êÍ­¼Ô (owner) ¤Î¼Â¸ú UID */

    gid_t gid;            /* ½êÍ­¼Ô¤Î¼Â¸ú GID */

    uid_t cuid;           /* ºîÀ®¼Ô (creator) ¤Î¼Â¸ú UID */

    gid_t cgid;           /* ºîÀ®¼Ô¤Î¼Â¸ú GID */

    unsigned short mode;  /* µö²Ä */

    unsigned short seq;   /* ¥·¡¼¥±¥ó¥¹ÈÖ¹æ */

};

cmd ¤È¤·¤ÆÍ­¸ú¤ÊÃͤÏ

IPC_STAT
semid ¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿¥«¡¼¥Í¥ë¥Ç¡¼¥¿¹½Â¤ÂΤξðÊó¤ò arg.buf ¤Ç»Ø¤µ¤ì¤¿ semid_ds ¹½Â¤ÂΤإ³¥Ô¡¼¤¹¤ë¡£ semnum °ú¤­¿ô¤Ï̵»ë¤µ¤ì¤ë¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ËÂФ¹¤ë Æɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
IPC_SET
arg.buf ¤Ç»ØÄꤵ¤ì¤¿ semid_ds ¹½Â¤ÂΤΥá¥ó¥Ð¡¼¤Î¤¤¤¯¤Ä¤«¤ÎÃͤò¡¢ ¤³¤Î¥»¥Þ¥Õ¥©¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿¥«¡¼¥Í¥ë¥Ç¡¼¥¿¹½Â¤ÂΤ˽ñ¤­¹þ¤ß¡¢ sem_ctime ¥á¥ó¥Ð¡¼¤ÎÃͤ⹹¿·¤¹¤ë¡£ ¹½Â¤ÂΤΰʲ¼¤Î¥á¥ó¥Ð¡¼¤¬¹¹¿·¤µ¤ì¤ë: sem_perm.uid, sem_perm.gid, sem_perm.mode (¤ÎºÇ²¼°Ì 9 ¥Ó¥Ã¥È)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú UID ¤¬½êÍ­¼Ô (sem_perm.uid) ¤Þ¤¿¤ÏºîÀ®¼Ô (sem_perm.cuid) ¤È°ìÃפ¹¤ë¤«¡¢¸Æ¤Ó½Ð¤·¤¿¿Í¤¬Æø¢¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ semnum °ú¤­¿ô¤Ï̵»ë¤µ¤ì¤ë¡£
IPC_RMID
¥»¥Þ¥Õ¥©½¸¹ç¤ò¤¿¤À¤Á¤Ëºï½ü¤·¡¢¤½¤Î½¸¹ç¾å¤Î semop(2) ¥³¡¼¥ë¤Ç¥Ö¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î¥×¥í¥»¥¹¤òÌܳФᤵ¤»¤ë (¥¨¥é¡¼Ãͤ¬ÊÖ¤µ¤ì¤Æ¡¢ errno ¤Ë EIDRM ¤¬ÀßÄꤵ¤ì¤ë)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬ ¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ÎºîÀ®¼Ô¤Þ¤¿¤Ï½êÍ­¼Ô¤È°ìÃפ¹¤ë¤«¡¢ ¸Æ¤Ó½Ð¤·¤¿¿Í¤¬Æø¢¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ semnum °ú¤­¿ô¤Ï̵»ë¤µ¤ì¤ë¡£
IPC_INFO (Linux ¸ÇÍ­)
¥·¥¹¥Æ¥àÁ´ÂΤǤΥ»¥Þ¥Õ¥©¤ÎÀ©¸Â¤È¥Ñ¥é¥á¡¼¥¿¤Ë´Ø¤¹¤ë¾ðÊó¤ò¡¢ arg.__buf ¤¬»Ø¤¹¹½Â¤ÂΤËÆþ¤ì¤ÆÊÖ¤¹¡£ ¤³¤Î¹½Â¤ÂÎ¤Ï seminfo ·¿¤Ç¤¢¤ë¡£ seminfo ¤Ï _GNU_SOURCE µ¡Ç½¸¡ºº¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤¿¾ì¹ç¤Ë <sys/sem.h> ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤ë:



struct  seminfo {

    int semmap;  /* ¥»¥Þ¥Õ¥©¡¦¥Þ¥Ã¥×¤ÎºÇÂ票¥ó¥È¥ê¿ô;

                    ̤»ÈÍÑ */

    int semmni;  /* ¥»¥Þ¥Õ¥©½¸¹ç¤ÎºÇÂç¿ô */

    int semmns;  /* Á´¥»¥Þ¥Õ¥©½¸¹çÃæ¤Î¥»¥Þ¥Õ¥©¤Î

                    ºÇÂç¿ô */

    int semmnu;  /* ¥¢¥ó¥É¥¥¹½Â¤ÂΤΥ·¥¹¥Æ¥àÁ´ÂΤǤÎ

                    ºÇÂç¿ô; ̤»ÈÍÑ */

    int semmsl;  /* °ì¤Ä¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ÎºÇÂ祻¥Þ¥Õ¥©¿ô */

    int semopm;  /* semop(2) ¤ËÅϤ¹Áàºî¤ÎºÇÂç¿ô */

    int semume;  /* ¥×¥í¥»¥¹¤¢¤¿¤ê¤Î¥¢¥ó¥É¥¥¡¦¥¨¥ó¥È¥ê

                    ¤ÎºÇÂç¿ô; ̤»ÈÍÑ */

    int semusz;  /* ¹½Â¤ÂÎ sem_undo ¤Î¥µ¥¤¥º */

    int semvmx;  /* ¥»¥Þ¥Õ¥©¤ÎºÇÂçÃÍ */

    int semaem;  /* ¥»¥Þ¥Õ¥©¤ÎÄ´À° (semaphore adjustment;

                     SEM_UNDO) ¤Î¤¿¤á¤Ëµ­Ï¿¤µ¤ì¤ëºÇÂçÃÍ */

};



ÀßÄê semmsl, semmns, semopm, semmni ¤Ï /proc/sys/kernel/sem ·Ðͳ¤ÇÊѹ¹²Äǽ¤Ç¤¢¤ë¡£ ¾Ü¤·¤¯¤Ï proc(5) ¤ò»²¾È¡£
SEM_INFO (Linux ¸ÇÍ­)
IPC_INFO ¤Î¤È¤­¤ÈƱ¤¸¾ðÊó¤ò³ÊǼ¤·¤¿ seminfo ¹½Â¤ÂΤòÊÖ¤¹¡£ ⤷¡¢°Ê²¼¤Î¥Õ¥£¡¼¥ë¥É¤Ë¤Ï¥»¥Þ¥Õ¥©¤¬¾ÃÈñ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à»ñ¸»¤Ë ´Ø¤¹¤ë¾ðÊ󤬳ÊǼ¤µ¤ì¤ëÅÀ¤¬°Û¤Ê¤ë¡£ semusz ¥Õ¥£¡¼¥ë¥É¤Ï¸½ºß¥·¥¹¥Æ¥à¾å¤Ë¸ºß¤¹¤ë¥»¥Þ¥Õ¥©½¸¹ç¤Î¿ô¤òÊÖ¤¹¡£ semaem ¥Õ¥£¡¼¥ë¥É¤Ï¥·¥¹¥Æ¥à¾å¤ÎÁ´¤Æ¤Î¥»¥Þ¥Õ¥©½¸¹ç¤Ë´Þ¤Þ¤ì¤ë ¥»¥Þ¥Õ¥©¤ÎÁí¿ô¤òÊÖ¤¹¡£
SEM_STAT (Linux ¸ÇÍ­)
IPC_STAT ¤ÈƱ¤¸¤¯ semid_ds ¹½Â¤ÂΤòÊÖ¤¹¡£ ⤷¡¢ semid °ú¤­¿ô¤Ï¡¢¥»¥Þ¥Õ¥©¼±Ê̻ҤǤϤʤ¯¡¢¥·¥¹¥Æ¥à¾å¤ÎÁ´¤Æ¤Î¥»¥Þ¥Õ¥©½¸¹ç ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´ÉÍý¤¹¤ë¥«¡¼¥Í¥ë¤ÎÆâÉôÇÛÎó¤Ø¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¢¤ë¡£
GETALL
½¸¹ç¤ÎÁ´¤Æ¤Î¥»¥Þ¥Õ¥©¤Î semval ¤ÎÃÍ (¸½ºß¤ÎÃÍ) ¤ò arg.array ¤ËÊÖ¤¹¡£ semnum °ú¤­¿ô¤Ï̵»ë¤µ¤ì¤ë¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ËÆɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
GETNCNT
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î semncnt ¤ÎÃÍ (¤³¤Î¥»¥Þ¥Õ¥©¤ÎÃͤ¬Áý²Ã¤¹¤ë¤Î¤òÂԤäƤ¤¤ë¥×¥í¥»¥¹¿ô) ¤òÊÖ¤¹ (½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î semval ¤ÎÁý²Ã¤òÂԤäƤ¤¤ë¥×¥í¥»¥¹¤Î¿ô¤òÊÖ¤¹)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ËÆɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
GETPID
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î sempid ¤ÎÃÍ (½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤ËºÇ¸å¤Ë semop(2) ¥³¡¼¥ë¤ò¼Â¹Ô¤·¤¿¥×¥í¥»¥¹¤Î PID) ¤òÊÖ¤¹¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ËÆɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
GETVAL
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î semval ¤ÎÃͤòÊÖ¤¹¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ËÆɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
GETZCNT
¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î semzcnt ¤ÎÃÍ (¤³¤Î¥»¥Þ¥Õ¥©¤ÎÃͤ¬ 0 ¤Ë¤Ê¤ë¤Î¤òÂԤäƤ¤¤ë¥×¥í¥»¥¹¤Î¿ô) ¤òÊÖ¤¹ (½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î semval ¤ÎÃͤ¬ 0 ¤Ë¤Ê¤ë¤Î¤òÂԤäƤ¤¤ë¥×¥í¥»¥¹¤Î¿ô¤òÊÖ¤¹)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤ËÆɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
SETALL
½¸¹ç¤ÎÁ´¤Æ¤Î¥»¥Þ¥Õ¥©¤Î semval ¤Ë arg.array ¤Ç»ØÄꤵ¤ì¤¿ÃͤòÀßÄꤹ¤ë¡£ ¤½¤Î½¸¹ç¤Ë´ØÏ¢¤¹¤ë semid_ds ¹½Â¤ÂΤΠsem_ctime ¥á¥ó¥Ð¡¼¤ÎÃͤ⹹¿·¤¹¤ë¡£ Á´¤Æ¤Î¥×¥í¥»¥¹¤Î¥»¥Þ¥Õ¥©¤ÎÊѹ¹¤Ë¤Ä¤¤¤Æ¤Î¥¢¥ó¥É¥¥¡¦¥¨¥ó¥È¥ê (semop(2) ¤ò»²¾È) ¤Ï¾Ãµî (clear) ¤µ¤ì¤ë¡£ ¥»¥Þ¥Õ¥©¤ÎÃͤÎÊѹ¹¤Ë¤è¤ê¡¢Â¾¤Î¥×¥í¥»¥¹Æâ¤Ç¥Ö¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë semop(2) ¥³¡¼¥ë¤Î³¹Ô¤¬µö²Ä¤µ¤ì¤ë¤È¡¢¤½¤ì¤é¤Î¥×¥í¥»¥¹¤Ïµ¯¤³¤µ¤ì¤ë (wake up)¡£ semnum °ú¤­¿ô¤Ï̵»ë¤µ¤ì¤ë¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤Ë Êѹ¹ (½ñ¤­¹þ¤ß) µö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
SETVAL
½¸¹ç¤Î semnum ÈÖÌܤΥ»¥Þ¥Õ¥©¤Î semval ¤Ë arg.val ¤ÎÃͤòÀßÄꤹ¤ë¡£¤½¤Î½¸¹ç¤Ë´ØÏ¢¤¹¤ë semid_ds ¹½Â¤ÂΤΠsem_ctime ¥á¥ó¥Ð¡¼¤ÎÃͤ⹹¿·¤¹¤ë¡£ Á´¤Æ¤Î¥×¥í¥»¥¹¤Î¥»¥Þ¥Õ¥©¤ÎÊѹ¹¤Ë¤Ä¤¤¤Æ¤Î¥¢¥ó¥É¥¥¡¦¥¨¥ó¥È¥ê¤Ï¾Ãµî¤µ¤ì¤ë¡£ ¥»¥Þ¥Õ¥©¤ÎÃͤÎÊѹ¹¤Ë¤è¤ê¡¢Â¾¤Î¥×¥í¥»¥¹Æâ¤Ç¥Ö¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë semop(2) ¥³¡¼¥ë¤Î³¹Ô¤¬µö²Ä¤µ¤ì¤ë¤È¡¢¤½¤ì¤é¤Î¥×¥í¥»¥¹¤Ïµ¯¤³¤µ¤ì¤ë (wake up)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥Þ¥Õ¥©½¸¹ç¤Ë Êѹ¹ (½ñ¤­¹þ¤ß) µö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

ÊÖ¤êÃÍ

¼ºÇÔ¤·¤¿¾ì¹ç¡¢ semctl() ¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤Ë¤½¤Î¥¨¥é¡¼¤ò¼¨¤¹¡£

¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï cmd ¤Ë¤è¤Ã¤Æ°Ê²¼¤ÎÉé¤Ç¤Ê¤¤ÃͤòÊÖ¤¹:

GETNCNT
semncnt ¤ÎÃÍ
GETPID
sempid ¤ÎÃÍ
GETVAL
semval ¤ÎÃÍ
GETZCNT
semzcnt ¤ÎÃÍ
IPC_INFO
Á´¤Æ¤Î¥»¥Þ¥Õ¥©½¸¹ç¤Ë´Ø¤¹¤ë¾ðÊó¤ò´ÉÍý¤·¤Æ¤¤¤ë¥«¡¼¥Í¥ë¤ÎÆâÉôÇÛÎó¤Î»ÈÍÑÃæ ¥¨¥ó¥È¥ê¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤ÎºÇÂçÃÍ (¤³¤Î¾ðÊó¤Ï¡¢¥·¥¹¥Æ¥à¤ÎÁ´¤Æ¤Î¥»¥Þ¥Õ¥©½¸¹ç¤Ë´Ø¤¹¤ë¾ðÊó¤ò¼èÆÀ¤¹¤ë¤¿¤á¤Ë SEM_STAT Áàºî¤ò·«¤êÊÖ¤·¼Â¹Ô¤¹¤ëºÝ¤Ë»ÈÍѤǤ­¤ë)
SEM_INFO
IPC_INFO ¤ÈƱ¤¸
SEM_STAT
semid ¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò»ý¤Ä¥»¥Þ¥Õ¥©½¸¹ç¤Î¼±ÊÌ»Ò

cmd ¤ÎÃͤ¬¤½¤ì°Ê³°¤Î¾ì¹ç¡¢À®¸ù¤¹¤ë¤È 0 ¤¬ÊÖ¤µ¤ì¤ë¡£

¥¨¥é¡¼

¼ºÇÔ¤·¤¿¾ì¹ç¤Ï errno ¤Ë¤Ï°Ê²¼¤ÎÃͤΤɤ줫¤¬ÀßÄꤵ¤ì¤ë:
EACCES
cmd °ú¤­¿ô¤¬ GETALL, GETPID, GETVAL, GETNCNT, GETZCNT, IPC_STAT, SEM_STAT, SETALL, SETVAL ¤Î¤¦¤Á¤Î²¿¤ì¤«¤ÎÃͤò»ý¤Á¡¢ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬¥»¥Þ¥Õ¥©¤ËÂФ·¤ÆɬÍפȤµ¤ì¤ëµö²Ä¤È CAP_IPC_OWNER ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capability) ¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£
EFAULT
arg.buf ¤Þ¤¿¤Ï arg.array ¤Ç»Ø¤µ¤ì¤Æ¤¤¤ë¥¢¥É¥ì¥¹¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£
EIDRM
¥»¥Þ¥Õ¥©½¸¹ç¤¬ºï½ü¤µ¤ì¤¿¡£
EINVAL
cmd ¤Þ¤¿¤Ï semid ¤Ë̵¸ú¤ÊÃͤ¬»ØÄꤵ¤ì¤¿¡£ ¤â¤·¤¯¤Ï¡¢ SEM_STAT Áàºî¤Î¾ì¹ç¤Ë¡¢ semid ¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹Ãͤ¬¸½ºß̤»ÈÍѤÎÇÛÎó¤Î¥¹¥í¥Ã¥È¤ò»²¾È¤¤¤Æ¤¤¤¿¡£
EPERM
cmd °ú¤­¿ô¤Ë IPC_SET ¤Þ¤¿¤Ï IPC_RMID ¤¬»ØÄꤵ¤ì¡¢¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬¥»¥Þ¥Õ¥©¤Î (sem_perm.cuid ¤Ç¸«¤Ä¤«¤ë) ºîÀ®¼Ô¤Þ¤¿¤Ï (sem_perm.uid ¤Ç¸«¤Ä¤«¤ë) ½êÍ­¼Ô¤Ç¤â¤Ê¤¯¡¢ ¥×¥í¥»¥¹¤¬ CAP_SYS_ADMIN ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤¿¤Ê¤¤¡£
ERANGE
cmd °ú¤­¿ô¤Ë SETALL ¤Þ¤¿¤Ï SETVAL ¤¬»ØÄꤵ¤ì¡¢(½¸¹ç¤Î¥»¥Þ¥Õ¥©¤Î¤É¤ì¤«¤Î) semval ¤ËÀßÄꤵ¤ì¤ëÃͤ¬ 0 ¤è¤ê¾®¤µ¤¤¤«¡¢¼ÂÁõ¤ÎÀ©¸Â SEMVMX ¤è¤ê¤âÂ礭¤¤¡£

½àµò

SVr4, POSIX.1-2001.

Ãí°Õ

IPC_INFO, SEM_STAT, SEM_INFO Áàºî¤Ï ipcs(8) ¥×¥í¥°¥é¥à¤Ë¤è¤Ã¤Æ³äÅö¤é¤ì¤¿»ñ¸»¤Ë¤Ä¤¤¤Æ¾ðÊó¤òÄ󶡤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë¡£ ¾­ÍèŪ¤Ë¤Ï¤³¤ì¤é¤ÏÊѹ¹¤µ¤ì¤ë¤«¡¢ /proc ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¡¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ë°ÜÆ°¤µ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£

¹½Â¤ÂÎ semid_ds Æâ¤Î¿¤¯¤Î¥Õ¥£¡¼¥ë¥É¤Ï¡¢ Linux 2.2 ¤Ç¤Ïû¤«¤Ã¤¿¤¬¡¢Linux 2.4 ¤Ç¤ÏŤ¯¤Ê¤Ã¤¿¡£ ¤³¤ÎÍøÅÀ¤òÀ¸¤«¤¹¤Ë¤Ï¡¢glibc-2.1.91 °Ê¹ß¤Î´Ä¶­²¼¤Ç ºÆ¥³¥ó¥Ñ¥¤¥ë¤¹¤ì¤Ð½½Ê¬¤Ç¤¢¤ë¡£ ¥«¡¼¥Í¥ë¤Ï¿·¤·¤¤·Á¼°¤Î¸Æ¤Ó½Ð¤·¤È¸Å¤¤·Á¼°¤Î¸Æ¤Ó½Ð¤·¤ò cmd Æâ¤Î IPC_64 ¥Õ¥é¥°¤Ç¶èÊ̤¹¤ë¡£

½é´ü¤Î¥Ð¡¼¥¸¥ç¥ó¤Î glibc ¤Ç¤Ï¡¢ semun ¶¦ÍÑÂÎ¤Ï <sys/sem.h> ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤¿¤¬¡¢ POSIX.1-2001 ¤Ç¤Ï¸Æ¤Ó½Ð¤·Â¦¤¬¤³¤Î¶¦ÍÑÂΤòÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ë¡£ ¤³¤Î¶¦ÍÑÂΤ¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤ glibc ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢ ¥Þ¥¯¥í _SEM_SEMUN_UNDEFINED ¤¬ <sys/sem.h> ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡£

°Ê²¼¤Ï semctl() ¥³¡¼¥ë¤Ë±Æ¶Á¤¹¤ë¥»¥Þ¥Õ¥©½¸¹ç¤Î¥·¥¹¥Æ¥àÀ©¸Â:

SEMVMX
semval ¤ÎºÇÂçÃÍ : ¼ÂÁõ°Í¸ (32767)¡£

°Ü¿¢À­¤ò¹â¤á¤ë¤¿¤á¤Î°ìÈÖÎɤ¤ÊýË¡¤Ï¡¢¾ï¤Ë 4 ¸Ä¤Î°ú¤­¿ô¤Ç semctl() ¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¤¢¤ë¡£

Linux ¤Ë¤ª¤¤¤Æ¡¢ semctl() ¤Ï¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ç¤Ï¤Ê¤¤¤¬¡¢¥·¥¹¥Æ¥à¥³¡¼¥ë ipc(2) ¤ò»È¤Ã¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£

´ØÏ¢¹àÌÜ

ipc(2), semget(2), semop(2), capabilities(7), sem_overview(7), svipc(7)