Rechercher une page de manuel
mq_overview
Langue: ja
Version: 2006-02-25 (openSuse - 09/10/07)
Section: 7 (Divers)
Sommaire
̾Á°
mq_overview - POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Î³µÍ×ÀâÌÀ
POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤ò»ÈÍѤ¹¤ë¤È¡¢¥×¥í¥»¥¹´Ö¤Ç ¥á¥Ã¥»¡¼¥¸¤Î·Á¤Ç¤Î¥Ç¡¼¥¿¤Î¤ä¤ê¼è¤ê¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¡£ ¤³¤Î API ¤Ï System V ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Î API (msgget(2), msgsnd(2), msgrcv(2) ¤Ê¤É) ¤È¤Ï°Û¤Ê¤ë¤â¤Î¤À¤¬¡¢Æ±Íͤε¡Ç½¤òÄ󶡤¹¤ë¡£¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤ÎºîÀ®¤È¥ª¡¼¥×¥ó¤Ï mq_open(3) ¤ò»È¤Ã¤Æ¹Ô¤¦¡£¤³¤Î´Ø¿ô¤Ï ¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò»Ò (message queue descriptor) (mqd_t) ¤òÊÖ¤¹¡£¤³¤ì°Ê¹ß¤Î¥³¡¼¥ë¤Ç¤Ï¡¢¥ª¡¼¥×¥ó¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï ¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò»Ò ¤ò»È¤Ã¤Æ»²¾È¤µ¤ì¤ë¡£ ³Æ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï /somename ¤Î·Á¤Î̾Á°¤Ç¶èÊ̤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ mq_open(3) ¤ËƱ¤¸Ì¾Á°¤òÅϤ¹¤³¤È¤Ç¡¢2¤Ä¤Î¥×¥í¥»¥¹¤ÇƱ°ì¤Î¥¥å¡¼¤ò Áàºî¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
¥á¥Ã¥»¡¼¥¸¤Î¥¥å¡¼¤Ø¤ÎÁ÷¼õ¿®¤Ï mq_send(3) ¤È mq_receive(3) ¤ò»È¤Ã¤Æ¹Ô¤¦¡£¥×¥í¥»¥¹¤¬¥¥å¡¼¤Î»ÈÍѤò½ª¤¨¤ë¤È¤¤Ë¤Ï¡¢ mq_close(3) ¤ò»È¤Ã¤Æ¥¥å¡¼¤ò¥¯¥í¡¼¥º¤¹¤ë¡£¥¥å¡¼¤¬¤â¤Ï¤äÉÔÍפȤʤ俾ì¹ç¤Ë¤Ï¡¢ mq_unlink(3) ¤ò»È¤Ã¤Æ¥¥å¡¼¤òºï½ü¤Ç¤¤ë¡£¥¥å¡¼¤Î°À¤Ï mq_getattr(3) ¤Ç¼èÆÀ¤Ç¤¡¢ (À©¸Â¤Ï¤¢¤ë¤¬) mq_setattr(3) ¤ÇÊѹ¹¤Ç¤¤ë¡£ mq_notify(3) ¤ò»È¤¦¤³¤È¤Ç¡¢¶õ¤Î¥¥å¡¼¤Ø¤Î¥á¥Ã¥»¡¼¥¸ÅþÃå¤òÈóƱ´ü¤Ç ÄÌÃΤ¹¤ë¤è¤¦¤ËÍ׵᤹¤ë¤³¤È¤â¤Ç¤¤ë¡£
¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò»Ò¤Ï ¥ª¡¼¥×¥ó¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò (open message queue description) ¤Ø¤Î»²¾È¤Ç¤¢¤ë (open(2) ¤â»²¾È)¡£ fork(2) ¼Â¹Ô¸å¤Ï¡¢»Ò¥×¥í¥»¥¹¤Ï¿Æ¥×¥í¥»¥¹¤Î¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò»Ò¤Î¥³¥Ô¡¼¤ò·Ñ¾µ¤¹¤ë¡£ ¤³¤ì¤é¤Îµ½Ò»Ò¤Ï¡¢¿Æ¥×¥í¥»¥¹¤ÎÂбþ¤¹¤ëµ½Ò»Ò¤ÈƱ¤¸¥ª¡¼¥×¥ó¥á¥Ã¥»¡¼¥¸¥¥å¡¼ µ½Ò¤ò»²¾È¤·¤Æ¤¤¤ë¡£¿Æ¥×¥í¥»¥¹¤È»Ò¥×¥í¥»¥¹¤ÎÂбþ¤¹¤ëµ½Ò»Ò¤Ï¡¢¥Õ¥é¥° (mq_flags) ¤ò¶¦Í¤¹¤ë¡£¤Ê¤¼¤Ê¤é¡¢¥Õ¥é¥°¤Ï¥ª¡¼¥×¥ó¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò¤Ë ´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¢¤ë¡£
³Æ¥á¥Ã¥»¡¼¥¸¤Ë¤Ï¤½¤ì¤¾¤ì Í¥ÀèÅÙ (priority) ¤¬¤¢¤ê¡¢¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®¥×¥í¥»¥¹¤Ø¤ÎÇÛÁ÷¤Ï¾ï¤Ë Í¥ÀèÅ٤ι⤤¥á¥Ã¥»¡¼¥¸¤«¤é½ç¤Ë¹Ô¤ï¤ì¤ë¡£ ¥á¥Ã¥»¡¼¥¸¤ÎÍ¥ÀèÅÙ¤Ï 0 (ÄãÍ¥Àè) ¤«¤é sysconf(_SC_MQ_PRIO_MAX) - 1 (¹âÍ¥Àè) ¤ÎÃͤò»ý¤Ä¡£ Linux ¤Ç¤Ï¡¢ sysconf(_SC_MQ_PRIO_MAX) ¤Ï 32768 ¤òÊÖ¤¹¤¬¡¢ POSIX.1-2001 ¤ÇÍ׵ᤵ¤ì¤Æ¤¤¤ë¤Î¤Ï 0 ¤«¤é 31 ¤Þ¤Ç¤ÎÍ¥ÀèÅÙ¤ò ¼ÂÁõ¤¹¤ë¤³¤È¤À¤±¤Ç¤¢¤ê¡¢¼ÂÁõ¤Ë¤è¤Ã¤Æ¤Ï¤³¤ÎÈϰϤÎÍ¥ÀèÅÙ¤·¤« Âбþ¤·¤Æ¤¤¤Ê¤¤¡£
¥é¥¤¥Ö¥é¥ê¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤È¥·¥¹¥Æ¥à¥³¡¼¥ë
¤Û¤È¤ó¤É¤Î¾ì¹ç¡¢¾åµ¤Î mq_*() ¥é¥¤¥Ö¥é¥ê¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ï¡¢Æ±¤¸Ì¾Á°¤Î²¼°ÌÁؤΥ·¥¹¥Æ¥à¥³¡¼¥ë¤ò »È¤Ã¤Æ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¡£¤³¤ÎÏÈÁȤߤˤ¢¤Æ¤Ï¤Þ¤é¤Ê¤¤¤â¤Î¤ò °Ê²¼¤Îɽ¤Ë¼¨¤¹¡£Library interface | System call |
mq_close(3) | close(2) |
mq_getattr(3) | mq_getsetattr(2) |
mq_open(3) | mq_open(2) |
mq_receive(3) | mq_timedreceive(2) |
mq_send(3) | mq_timedsend(2) |
mq_setattr(3) | mq_getsetattr(2) |
mq_timedreceive(3) | mq_timedreceive(2) |
mq_timedsend(3) | mq_timedsend(2) |
mq_unlink(3) | mq_unlink(2) |
Linux ¸Çͤξܺٻö¹à
¥Ð¡¼¥¸¥ç¥ó
Linux ¤Ç¤Ï POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï¥«¡¼¥Í¥ë 2.6.6 °Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£ glibc ¤Ç¤Ï¥Ð¡¼¥¸¥ç¥ó 2.3.4 °Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£¥«¡¼¥Í¥ë¤ÎÀßÄê
POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Î¥µ¥Ý¡¼¥È¤Ï¡¢¥«¡¼¥Í¥ë¤ÎÀßÄê (configuration) ¥ª¥×¥·¥ç¥ó CONFIG_POSIX_MQUEUE ¤ÇÀßÄê²Äǽ¤Ç¤¢¤ë¡£¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï͸ú¤Ç¤¢¤ë¡£»ý³À
POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï¥«¡¼¥Í¥ëÆâ¤ÇÊÝ»ý¤µ¤ì¤ë¡£ mq_unlink(3) ¤Çºï½ü¤µ¤ì¤Ê¤±¤ì¤Ð¡¢¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï ¥·¥¹¥Æ¥à¤¬¥·¥ã¥Ã¥È¥À¥¦¥ó¤µ¤ì¤ë¤Þ¤Ç¸ºß¤·Â³¤±¤ë¡£¥ê¥ó¥¯
POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼ API ¤ò»ÈÍѤ·¤¿¥×¥í¥°¥é¥à¤Ï cc -lrt ¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¡¢¥ê¥¢¥ë¥¿¥¤¥à¥é¥¤¥Ö¥é¥ê librt ¤È¥ê¥ó¥¯¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£/proc ¥¤¥ó¥¿¥Õ¥§¡¼¥¹
°Ê²¼¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»È¤Ã¤Æ¡¢POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤¬¾ÃÈñ¤¹¤ë¥«¡¼¥Í¥ë ¥á¥â¥ê¤ÎÎ̤òÀ©¸Â¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£- /proc/sys/fs/mqueue/msg_max
- ¤³¤Î¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¡¢°ì¤Ä¤Î¥¥å¡¼¤ËÆþ¤ì¤é¤ì¤ë¥á¥Ã¥»¡¼¥¸¤ÎºÇÂç¿ô¤Î ¾å¸ÂÃͤò»²¾È¤·¤¿¤êÊѹ¹¤·¤¿¤ê¤Ç¤¤ë¡£¤³¤ÎÃͤϡ¢ mq_open(3) ¤ËÅϤ¹ attr->mq_maxmsg °ú¤¿ô¤ËÂФ¹¤ë¾å¸ÂÃͤȤ·¤Æµ¡Ç½¤¹¤ë¡£ msg_max ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤª¤è¤ÓºÇ¾®ÃÍ¤Ï 10 ¤Ç¤¢¤ë; ¾å¸Â¤Ï¡ÖËä¤á¹þ¤ß¤Î¸ÇÄêÃÍ¡×(HARD_MAX) ¤Ç (131072 / sizeof(void *)) (Linux/86 ¤Ç¤Ï 32768) ¤Ç¤¢¤ë¡£ ¤³¤Î¾å¸Â¤ÏÆø¢¥×¥í¥»¥¹ (CAP_SYS_RESOURCE) ¤Ç¤Ï̵»ë¤µ¤ì¤ë¤¬¡¢Ëä¤á¹þ¤ß¤Î¸ÇÄêÃͤˤè¤ë¾å¸Â¤Ï ¤É¤ó¤Ê¾ì¹ç¤Ë¤Ç¤âŬÍѤµ¤ì¤ë¡£
- /proc/sys/fs/mqueue/msgsize_max
- ¤³¤Î¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¡¢¥á¥Ã¥»¡¼¥¸¤ÎºÇÂ祵¥¤¥º¤Î¾å¸ÂÃͤò
»²¾È¤·¤¿¤êÊѹ¹¤·¤¿¤ê¤Ç¤¤ë¡£
¤³¤ÎÃͤϡ¢
mq_open(3) ¤ËÅϤ¹
attr.mq_msgsize °ú¤¿ô¤ËÂФ¹¤ë¾å¸ÂÃͤȤ·¤Æµ¡Ç½¤¹¤ë¡£
msgsize_max ¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤª¤è¤ÓºÇ¾®ÃÍ¤Ï 8192 ¥Ð¥¤¥È¤Ç¤¢¤ë;
¾å¸Â¤Ï INT_MAX (Linux/86 ¤Ç¤Ï 2147483647) ¤Ç¤¢¤ë¡£
¤³¤Î¾å¸Â¤ÏÆø¢¥×¥í¥»¥¹
(CAP_SYS_RESOURCE) ¤Ç¤Ï̵»ë¤µ¤ì¤ë¡£ - /proc/sys/fs/mqueue/queues_max
- ¤³¤Î¥Õ¥¡¥¤¥ë¤ò»È¤Ã¤Æ¡¢ºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Î¿ô¤Ë
ÂФ¹¤ë¥·¥¹¥Æ¥àÁ´ÂΤǤÎÀ©¸Â¤ò»²¾È¤·¤¿¤êÊѹ¹¤·¤¿¤ê¤Ç¤¤ë¡£
°ìÅÙ¤³¤Î¾å¸Â¤Ë㤹¤ë¤È¡¢¿·¤·¤¤¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤òºîÀ®¤Ç¤¤ë¤Î¤Ï
Æø¢¥×¥í¥»¥¹
(CAP_SYS_RESOURCE) ¤À¤±¤È¤Ê¤ë¡£
queues_max ¤Î¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï 256 ¤Ç¤¢¤ê¡¢
0 ¤«¤é INT_MAX ¤ÎÈϰϤÎǤ°Õ¤ÎÃͤËÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£
¥ê¥½¡¼¥¹À©¸Â
¥ê¥½¡¼¥¹¾å¸Â RLIMIT_MSGQUEUE ¤Ï¡¢¥×¥í¥»¥¹¤Î¼Â UID ¤ËÂбþ¤¹¤ëÁ´¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤¬¾ÃÈñ¤¹¤ë ¥á¥â¥ê¶õ´Ö¤ÎÎ̤ËÂФ·¤Æ¾å¸Â¤òÀßÄꤹ¤ë¡£ getrlimit(2) ¤ò»²¾È¡£¥á¥Ã¥»¡¼¥¸¥¥å¡¼¡¦¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Þ¥¦¥ó¥È
Linux ¤Ç¤Ï¡¢¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï²¾ÁÛ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÆâ¤ËºîÀ®¤µ¤ì¤ë (¾¤Î¼ÂÁõ¤Ç¤âƱÍͤε¡Ç½¤¬Ä󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤â¤¢¤ë¤¬¡¢ ¾ÜºÙ¤Ï°ã¤Ã¤Æ¤¤¤ë¤À¤í¤¦)¡£ °Ê²¼¤Î¥³¥Þ¥ó¥É¤ò»È¤¦¤³¤È¤Ç¡¢¤³¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¥Þ¥¦¥ó¥È¤Ç¤¤ë:$ mkdir /dev/mqueue $ mount -t mqueue none /dev/mqueue¥Þ¥¦¥ó¥È¤·¤¿¥Ç¥£¥ì¥¯¥È¥ê¤Î¥¹¥Æ¥£¥Ã¥¡¼¥Ó¥Ã¥È (sticky bit) ¤Ï ¼«Æ°Åª¤Ë¥ª¥ó¤È¤Ê¤ë¡£
¥á¥Ã¥»¡¼¥¸¥¥å¡¼¡¦¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î¥Þ¥¦¥ó¥È¸å¤Ï¡¢¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ Ä̾ï»È¤¦¥³¥Þ¥ó¥É (Î㤨¤Ð ls(1) ¤ä rm(1)) ¤ò»È¤Ã¤Æ¡¢¥·¥¹¥Æ¥à¾å¤Î¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤òɽ¼¨¤·¤¿¤ê Áàºî¤·¤¿¤ê¤Ç¤¤ë¡£
¥Ç¥£¥ì¥¯¥È¥êÆâ¤Î³Æ¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤Ï 1¹Ô¤Ç¤¢¤ê¡¢ ¥¥å¡¼¤Ë´Ø¤¹¤ë¾ðÊó¤¬É½¼¨¤µ¤ì¤ë¡£
$ ls /dev/mqueue/mymq QSIZE:129 NOTIFY:2 SIGNO:0 NOTIFY_PID:8260 $ mount -t mqueue none /dev/mqueue³Æ¥Õ¥£¡¼¥ë¥É¤Î¾ÜºÙ¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë:
- QSIZE
- ¥¥å¡¼¤ËÆþ¤Ã¤Æ¤¤¤ëÁ´¥á¥Ã¥»¡¼¥¸¤Î¹ç·×¥Ð¥¤¥È¿ô¡£
- NOTIFY_PID
- ¤³¤ÎÃͤ¬ 0 °Ê³°¤Î¾ì¹ç¡¢¤³¤ÎÃͤΠPID ¤ò»ý¤Ä¥×¥í¥»¥¹¤¬ mq_notify(3) ¤ò»È¤Ã¤Æ¡¢ÈóƱ´ü¤Î¥á¥Ã¥»¡¼¥¸ÄÌÃΤò¹Ô¤¦¤è¤¦¤ËÀßÄꤷ¤¿¤³¤È¤ò¼¨¤¹¡£ ¤É¤Î¤è¤¦¤ËÄÌÃΤ¬¹Ô¤ï¤ì¤ë¤«¤Ï¡¢°Ê²¼¤Î¥Õ¥£¡¼¥ë¥É¤Ë¤è¤ê·èÄꤵ¤ì¤ë¡£
- NOTIFY
- ÄÌÃÎÊýË¡: 0 ¤Ï SIGEV_SIGNAL; 1 ¤Ï SIGEV_NONE; 2 ¤Ï SIGEV_THREAD
- SIGNO
- SIGEV_SIGNAL ¤Ë»ÈÍѤµ¤ì¤ë¥·¥°¥Ê¥ëÈֹ档
¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò»Ò¤Î¥Ý¡¼¥ê¥ó¥°
Linux ¤Ç¤Ï¡¢¥á¥Ã¥»¡¼¥¸¥¥å¡¼µ½Ò»Ò¤Ï¼ÂºÝ¤Ï¥Õ¥¡¥¤¥ëµ½Ò»Ò (file descriptor) ¤Ç¤¢¤ê¡¢ select(2), poll(2), epoll(7) ¤ò»È¤Ã¤Æ´Æ»ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¤³¤Îµ¡Ç½¤Î°Ü¿¢À¤Ï¤Ê¤¤¡£½àµò
POSIX.1-2001.Ãí°Õ
System V ¥á¥Ã¥»¡¼¥¸¥¥å¡¼ (msgget(2), msgsnd(2), msgrcv(2) ¤Ê¤É) ¤Ï¥×¥í¥»¥¹´Ö¤Ç¥á¥Ã¥»¡¼¥¸¤ò¤ä¤ê¼è¤ê¤¹¤ë¤¿¤á¤Î¸Å¤¤ API ¤Ç¤¢¤ë¡£ POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï System V ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤è¤ê¤â¤¦¤Þ¤¯ À߷פµ¤ì¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òÄ󶡤·¤Æ¤¤¤ë¡£ °ìÊý¤Ç¡¢POSIX ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤Ï System V ¥á¥Ã¥»¡¼¥¸¥¥å¡¼¤ÈÈæ¤Ù¤ë¤È ÍøÍѤǤ¤ë¥·¥¹¥Æ¥à¤¬¾¯¤Ê¤¤ (Æäˡ¢¸Å¤¤¥·¥¹¥Æ¥à¤Ç¤Ï¾¯¤Ê¤¤)¡£Îã
³Æ¼ï¤Î¥á¥Ã¥»¡¼¥¸¥¥å¡¼´Ø¿ô¤ò»ÈÍѤ·¤¿Î㤬 mq_notify(3) ¤ËµºÜ¤µ¤ì¤Æ¤¤¤ë¡£´ØÏ¢¹àÌÜ
getrlimit(2), mq_getsetattr(2), mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), poll(2), select(2), epoll(4)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre