msgctl

Autres langues

Langue: ja

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

Section: 2 (Appels système)

̾Á°

msgctl - ¥á¥Ã¥»¡¼¥¸À©¸æÁàºî

½ñ¼°


#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/msg.h>

int msgctl(int msqid, int cmd, struct msqid_ds *buf);

ÀâÌÀ

msgctl() ¤Ï¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¼±ÊÌ»Ò msqid ¤Ç»ØÄꤵ¤ì¤¿¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼ (message queue) ¤ËÂФ·¤Æ cmd ¤Ç»ØÄꤵ¤ì¤¿À©¸æÁàºî¤ò¹Ô¤Ê¤¦¡£

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




struct msqid_ds {

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

    time_t         msg_stime;    /* ºÇ¸å¤Î msgsnd(2) ¤Î»þ¹ï */

    time_t         msg_rtime;    /* ºÇ¸å¤Î msgrcv(2) ¤Î»þ¹ï */

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

    unsigned long  __msg_cbytes; /* ¥­¥å¡¼¤Ë¤¢¤ë¸½ºß¤Î¥Ð¥¤¥È¿ô

                                    (ɸ½à¤Ç¤Ï¤Ê¤¤) */

    msgqnum_t      msg_qnum;     /* ¥­¥å¡¼¤Ë¤¢¤ë¸½ºßÆþ¤Ã¤Æ¤¤¤ë

                                    ¥á¥Ã¥»¡¼¥¸¤Î¿ô */

    msglen_t       msg_qbytes;   /* ¥­¥å¡¼¤Ëµö²Ä¤µ¤ì¤Æ¤¤¤ë

                                    ºÇÂç¥Ð¥¤¥È¿ô */

    pid_t          msg_lspid;    /* ºÇ¸å¤Î msgsnd(2) ¤Î PID */

    pid_t          msg_lrpid;    /* ºÇ¸å¤Î msgrcv(2) ¤Î PID */

};

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


struct ipc_perm {

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

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

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

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

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

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

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

};

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

IPC_STAT
msqid ¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¡¦¥Ç¡¼¥¿¹½Â¤ÂΤ«¤é¡¢¥Ý¥¤¥ó¥¿ buf ¤¬»Ø¤·¼¨¤¹ msqid_ds ¹½Â¤ÂΤ˾ðÊó¤ò¥³¥Ô¡¼¤¹¤ë¡£ ¸Æ¤Ó½Ð¤·Â¦¤Ï¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤ËÂФ¹¤ëÆɤ߹þ¤ßµö²Ä¤ò»ý¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
IPC_SET
¥Ý¥¤¥ó¥¿ buf ¤¬»Ø¤·¼¨¤¹ msqid_ds ¹½Â¤ÂΤΥá¥ó¥Ð¡¼¤ÎÃͤò¡¢¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿ ¥«¡¼¥Í¥ë¡¦¥Ç¡¼¥¿¹½Â¤ÂΤ˽ñ¤­¹þ¤ß¡¢ msg_ctime ¥á¥ó¥Ð¡¼¤â¹¹¿·¤¹¤ë¡£ ¹½Â¤ÂΤΥá¥ó¥Ð¡¼¤Î¤¦¤Á¡¢¹¹¿·¤µ¤ì¤ë¤â¤Î¤ò°Ê²¼¤Ë¼¨¤¹: msg_qbytes, msg_perm.uid, msg_perm.gid, msg_perm.mode (¤Î²¼°Ì 9 ¥Ó¥Ã¥È)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬¡¢¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Î½êÍ­¼Ô (msg_perm.uid) ¤Þ¤¿¤ÏºîÀ®¼Ô (msg_perm.cuid) ¤È°ìÃפ¹¤ë¤«¡¢¸Æ¤Ó½Ð¤·¸µ¤¬Æø¢¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ msg_qbytes ¤ò¥·¥¹¥Æ¥à¡¦¥Ñ¥é¥á¡¼¥¿¤Î MSGMNB ¤òĶ¤¨¤ÆÀßÄꤹ¤ë¤Ë¤Ï¡¢Å¬ÀÚ¤ÊÆø¢ (Linux ¤Ç¤Ï CAP_IPC_RESOURCE ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capability)) ¤¬É¬ÍפǤ¢¤ë¡£
IPC_RMID
¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤ò¤¿¤À¤Á¤Ëºï½ü¤¹¤ë¡£ Ʊ»þ¤Ë¤½¤Î¹½Â¤ÂΤÎÆɤ߽ñ¤­¤ÎÂÔ¤Á¾õÂ֤ˤ¢¤Ã¤¿¥×¥í¥»¥¹¤ËÄÌÃΤ¹¤ë (¥¨¥é¡¼¤¬Ê֤ꡢ errno ¤¬ EIDRM ¤ËÀßÄꤵ¤ì¤ë)¡£ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬Å¬ÀÚ¤ÊÆø¢¤ò»ý¤Ã¤Æ¤¤¤ë¤«¡¢ ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤ÎºîÀ®¼Ô¤« ½êÍ­¼Ô¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
IPC_INFO (Linux ¸ÇÍ­)
¥·¥¹¥Æ¥àÁ´ÂΤǤΥá¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤ÎÀ©¸Â¤È¥Ñ¥é¥á¡¼¥¿¤Ë´Ø¤¹¤ë¾ðÊó¤ò¡¢ buf ¤¬»Ø¤¹¹½Â¤ÂΤËÆþ¤ì¤ÆÊÖ¤¹¡£ ¤³¤Î¹½Â¤ÂÎ¤Ï msginfo ·¿¤Ç¤¢¤ë (¤½¤Î¤¿¤á¥­¥ã¥¹¥È¤¬É¬ÍפǤ¢¤ë)¡£ msginfo ¤Ï _GNU_SOURCE µ¡Ç½¸¡ºº¥Þ¥¯¥í¤¬ÄêµÁ¤µ¤ì¤¿¾ì¹ç¤Ë <sys/msg.h> ¤Ç°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤ë:



struct msginfo {

    int msgpool; /* ¥á¥Ã¥»¡¼¥¸¡¦¥Ç¡¼¥¿¤ÎÊÝ»ý¤Ë»ÈÍѤµ¤ì¤ë

                    ¥Ð¥Ã¥Õ¥¡¡¦¥×¡¼¥ë¤ÎÂ礭¤µ (¥Ð¥¤¥Èñ°Ì) */

    int msgmap;  /* ¥á¥Ã¥»¡¼¥¸¡¦¥Þ¥Ã¥×¤ÎºÇÂ票¥ó¥È¥ê¿ô;

                    ̤»ÈÍÑ */

    int msgmax;  /* °ì¤Ä¤Î¥á¥Ã¥»¡¼¥¸¤Ë½ñ¤­¹þ¤ß²Äǽ¤Ê

                    ºÇÂç¥Ð¥¤¥È¿ô */

    int msgmnb;  /* °ì¤Ä¤Î¥­¥å¡¼¤Ë½ñ¤­¹þ¤ß²Äǽ¤ÊºÇÂç¥Ð¥¤¥È¿ô;

                    (msgget(2) ¤Ç¤Î) ¥­¥å¡¼ºîÀ®Ãæ¤Î msg_qbytes

                    ¤Î½é´ü²½¤Ë»ÈÍѤµ¤ì¤ë */

    int msgmni;  /* ¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Î¿ô¤ÎºÇÂçÃÍ */

    int msgssz;  /* ¥á¥Ã¥»¡¼¥¸¡¦¥»¥°¥á¥ó¥È¤Î¥µ¥¤¥º; ̤»ÈÍÑ */

    int msgtql;  /* ¥·¥¹¥Æ¥à¾å¤ÎÁ´¥­¥å¡¼¤ÎºÇÂç¥á¥Ã¥»¡¼¥¸¿ô;

                    ̤»ÈÍÑ */

    unsigned short int msgseg;

                 /* ºÇÂ祻¥°¥á¥ó¥È¿ô; ̤»ÈÍÑ */

};



ÀßÄê msgmni , msgmax , msgmnb ¤Ï /proc ¤Ë¤¢¤ëƱ¤¸Ì¾Á°¤Î¥Õ¥¡¥¤¥ë·Ðͳ¤ÇÊѹ¹²Äǽ¤Ç¤¢¤ë¡£ ¾Ü¤·¤¯¤Ï proc(5) ¤ò»²¾È¡£
MSG_INFO (Linux ¸ÇÍ­)
IPC_INFO ¤Î¤È¤­¤ÈƱ¤¸¾ðÊó¤ò³ÊǼ¤·¤¿ msginfo ¹½Â¤ÂΤòÊÖ¤¹¡£ ⤷¡¢°Ê²¼¤Î¥Õ¥£¡¼¥ë¥É¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤¬ ¾ÃÈñ¤·¤Æ¤¤¤ë¥·¥¹¥Æ¥à»ñ¸»¤Ë´Ø¤¹¤ë¾ðÊ󤬳ÊǼ¤µ¤ì¤ëÅÀ¤¬°Û¤Ê¤ë¡£ msgpool ¥Õ¥£¡¼¥ë¥É¤Ï¸½ºß¥·¥¹¥Æ¥à¾å¤Ë¸ºß¤¹¤ë¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Î¿ô¤òÊÖ¤¹¡£ msgmap ¥Õ¥£¡¼¥ë¥É¤Ï¥·¥¹¥Æ¥à¾å¤ÎÁ´¤Æ¤Î¥­¥å¡¼¤ËÆþ¤Ã¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸Áí¿ô¤òÊÖ¤¹¡£ msgtql ¥Õ¥£¡¼¥ë¥É¤Ï¥·¥¹¥Æ¥à¾å¤ÎÁ´¤Æ¤Î¥­¥å¡¼¤ËÆþ¤Ã¤Æ¤¤¤ëÁ´¥á¥Ã¥»¡¼¥¸¤Î Áí¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£
MSG_STAT (Linux ¸ÇÍ­)
IPC_STAT ¤ÈƱ¤¸¤¯ msqid_ds ¹½Â¤ÂΤòÊÖ¤¹¡£ ⤷¡¢ msqid °ú¤­¿ô¤Ï¡¢¥­¥å¡¼¼±Ê̻ҤǤϤʤ¯¡¢¥·¥¹¥Æ¥à¾å¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼ ¤Ë´Ø¤¹¤ë¾ðÊó¤ò´ÉÍý¤¹¤ë¥«¡¼¥Í¥ë¤ÎÆâÉôÇÛÎó¤Ø¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ç¤¢¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤¹¤ë¤È¡¢ IPC_STAT, IPC_SET, IPC_RMID ¤Ï 0 ¤òÊÖ¤¹¡£ IPC_INFO ¤È MSG_INFO Áàºî¤Ï¡¢À®¸ù¤¹¤ë¤È¡¢Á´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Ë´Ø¤¹¤ë¾ðÊó¤ò ´ÉÍý¤·¤Æ¤¤¤ë¥«¡¼¥Í¥ë¤ÎÆâÉôÇÛÎó¤Î»ÈÍÑÃ楨¥ó¥È¥ê¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Î ¤¦¤ÁºÇÂçÃͤòÊÖ¤¹ (¤³¤Î¾ðÊó¤Ï¡¢¥·¥¹¥Æ¥à¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Ë´Ø¤¹¤ë¾ðÊó¤ò ¼èÆÀ¤¹¤ë¤¿¤á¤Ë¡¢ MSG_STAT Áàºî¤ò·«¤êÊÖ¤·¼Â¹Ô¤¹¤ëºÝ¤Ë»ÈÍѤǤ­¤ë)¡£ MSG_STAT Áàºî¤Ï¡¢À®¸ù¤¹¤ë¤È¡¢ msqid ¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹¤ò»ý¤Ä¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Î¼±Ê̻ҤòÊÖ¤¹¡£

¥¨¥é¡¼¤Î¾ì¹ç¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤òŬÀÚ¤ËÀßÄꤹ¤ë¡£

¥¨¥é¡¼

¼ºÇÔ¤·¤¿¾ì¹ç¡¢ errno ¤Ï°Ê²¼¤ÎÃͤÎÃæ¤Î¤É¤ì¤«°ì¤Ä¤ËÀßÄꤵ¤ì¤ë:
EACCES
°ú¤­¿ô cmd ¤¬ IPC_STAT ¤Þ¤¿¤Ï MSG_STAT ¤ËÅù¤·¤¤¤¬¡¢¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼ msqid ¤ËÂФ¹¤ëÆɤ߹þ¤ßµö²Ä¤ò»ý¤Ã¤Æ¤ª¤é¤º¡¢¤«¤Ä CAP_IPC_OWNER ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£
EFAULT
°ú¤­¿ô cmd ¤¬ IPC_SET ¤« IPC_STAT ¤Ç¡¢¥Ý¥¤¥ó¥¿ buf ¤Ç»Ø¤µ¤ì¤Æ¤¤¤ë¥¢¥É¥ì¥¹¤¬¥¢¥¯¥»¥¹²Äǽ¤Ç¤Ê¤¤¡£
EIDRM
¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤¬ºï½ü¤µ¤ì¤¿¡£
EINVAL
cmd ¤Þ¤¿¤Ï msqid ¤ËÉÔÀµ¤ÊÃͤ¬ÀßÄꤵ¤ì¤¿¡£ ¤â¤·¤¯¤Ï¡¢ MSG_STAT Áàºî¤Î¾ì¹ç¤Ë¡¢ msqid ¤Ç»ØÄꤵ¤ì¤¿¥¤¥ó¥Ç¥Ã¥¯¥¹Ãͤ¬¸½ºß̤»ÈÍѤÎÇÛÎó¤Î¥¹¥í¥Ã¥È¤ò»²¾È¤¤¤Æ¤¤¤¿¡£
EPERM
°ú¤­¿ô cmd ¤¬ IPC_SET ¤« IPC_RMID ¤Ç¤¢¤ë¤¬¡¢¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬¥á¥Ã¥»¡¼¥¸¥­¥å¡¼¤Î (msg_perm.cuid ¤È¤·¤Æ¸«¤Ä¤«¤ë) ºîÀ®¼Ô ¤È (msg_perm.uid ¤È¤·¤Æ¸«¤Ä¤«¤ë) ½êÍ­¼Ô¤Î¤¤¤º¤ì¤Ç¤â¤Ê¤¯¡¢ ¤«¤Ä¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤ËÆø¢ (Linux ¤Ç¤Ï CAP_SYS_ADMIN ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£) ¤¬¤Ê¤¤¡£

½àµò

SVr4, POSIX.1-2001.

Ãí°Õ

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

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

´ØÏ¢¹àÌÜ

msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), svipc(7)