¸®´ª½º ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ °¡À̵å
/* message buffer for msgsnd and msgrcv calls */
/* msgsnd¿Í msgrcv È£ÃâÀ» À§ÇÑ ¸Þ¼¼Áö ¹öÆÛ */
struct msgbuf {
long mtype; /* type of message ¸Þ¼¼Áö ŸÀÔ */
char mtext[1]; /* message text ¸Þ¼¼Áö ³»¿ë */
};
¾ç¼ö·Î Ç¥ÇöµÇ´Â ¸Þ¼¼Áö ŸÀÔ. ¹Ýµå½Ã ¾ç¼ö¿©¾ß ÇÑ´Ù.
¸Þ¼¼Áö ÀÚ·á ÀÚü.
ÁÖ¾îÁø ¸Þ¼¼Áö¿¡ ŸÀÔÀ» ºÎ¿©ÇÏ´Â ´É·ÂÀº º»ÁúÀûÀ¸·Î ´ÜÀÏ Å¥¿¡¼ÀÇ ´ÙÁß(multiplex) ¸Þ¼¼ÁöµéÀ» ¼ö¿ëÇÒ ´É·ÂÀ» ºÎ¿©ÇÑ´Ù. ¿¹¸¦ µé¸é, Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î¼¼½ºµéÀº ¸ÅÁ÷¹øÈ£ (magic number)¸¦ ÇÒ´ç¹ÞÀ» ¼ö ÀÖ°í À̰ÍÀº ¼¹ö ÇÁ·Î¼¼½º·Î ºÎÅÍ º¸³»Áø ¸Þ¼¼Áöµé¿¡ ´ëÇØ ¸Þ¼¼Áö ŸÀÔó·³ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¼¹ö´Â ÀÚüÀûÀ¸·Î ¸î¸îÀÇ ´Ù¸¥ ¹øÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ°í, Ŭ¶óÀÌ¾ðÆ®´Â ±×¹øÈ£·Î ¸Þ¼¼Áö¸¦ º¸³»±â À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶Ç ´Ù¸¥ ½Ã³ª¸®¿À¿¡¼´Â ÀÀ¿ëÇÁ·Î±×·¥Àº ¿¡·¯ ¸Þ¼¼Áö¿¡ ´ëÇØ ¸Þ¼¼Áö ŸÀÔ '1'¸¦ ¿äû ¸Þ¼¼Áö(request message)¿¡ ´ëÇØ ¸Þ¼¼Áö ŸÀÔ '2'¸¦ Ç¥½ÃÇÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ °¡´É¼ºÀº ³¡ÀÌ ¾ø´Ù.
¶Ç ´Ù¸¥ ¹æ¹ýÀº ´ë°³ ¸Þ¼¼Áö ÀÚ·á ¿ä¼Ò (mtext)¿¡ ¸Å¿ì ¼¼úÀûÀÎ À̸§À» ºÎ¿©ÇÏ¿© ÇöȤµÇÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀÌ´Ù. ÀÌ Çʵå´Â ²À ¹®ÀÚµéÀÇ ¹è¿ÀÌ¿©¾ß ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¾î¶² ÇüÅÂÀÇ ¾î¶² ÀÚ·áÀÌµç »ó°ü¾ø´Ù. ÀÌ ±¸Á¶´Â ÀÀ¿ëÇÁ·Î±×·¥ ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ ÀçÁ¤ÀÇµÉ ¼ö ÀÖÀ¸¹Ç·Î, ÇÊµå ±× ÀÚü¸¸À¸·Îµµ ½ÇÁ¦·Î ¿ÏÀüÈ÷ ¸¶À½´ë·ÎÀÌ´Ù.
struct my_msgbuf {
long mtype; /* Message type ¸Þ¼¼Áö ŸÀÔ */
long request_id; /* Request identifier ¿äû È®ÀÎÀÚ */
struct client info; /* Client information structure Ŭ¶óÀÌ¾ðÆ® Á¤º¸ ±¸Á¶ */
};
Àü°ú °°Àº ¸Þ¼¼Áö ŸÀÔÀ» º¼ ¼ö ÀÖÁö¸¸, ±¸Á¶ÀÇ ³ª¸ÓÁö´Â µÎ°³ÀÇ ´Ù¸¥ ¿ä¼Ò·Î ¹Ù²î¾ú´Ù. ±× Áß Çϳª´Â ¶Ç ´Ù¸¥ ±¸Á¶Ã¼(structure)ÀÌ´Ù! À̰ÍÀÌ ¸Þ¼¼Áö Å¥ÀÇ ÀåÁ¡ÀÌ´Ù. Ä¿³ÎÀº ÀÚ·á°¡ ¹«¾ùÀ̵ç ÀÚ·áÀÇ º¯È¯À» ÀÏÀ¸Å°Áö ¾Ê´Â´Ù. ¾î¶² Á¤º¸µçÁö º¸³»Áú ¼ö ÀÖ´Ù.
ÁÖ¾îÁø ¸Þ¼¼ÁöÀÇ ÃÖ´ë Å©±â¿¡ ´ëÇÑ ³»ºÎÀûÀÎ Á¦ÇÑÀº ¾ø´Ù. ¸®´ª½º¿¡¼´Â linux/msg.h¿¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.:
#define MSGMAX 4056 /* <= 4056 */ /* max size if message (bytes) ¸Þ¼¼ÁöÀÇ ÃÖ´ë Å©±â */
/* °¢ ¸Þ¼¼Áö¿¡ ´ëÇÑ ÇѰ³ÀÇ ¸Þ¼¼Áö ±¸Á¶Ã¼ */
struct msg {
struct msg *msg_next; /* Å¥¿¡¼ÀÇ ´ÙÀ½ ¸Þ¼¼Áö */
long msg_type;
char *msg_spot; /* ¸Þ¼¼Áö ³»¿ë ÁÖ¼Ò */
short msg_ts; /* ¸Þ¼¼Áö ³»¿ë Å©±â */
};
/* ½Ã½ºÅÛ»ó¿¡¼ °¢ Å¥¿¡ ´ëÇÑ msqid ±¸Á¶ */
struct msqid_ds {
struct ipc_perm msg_perm;
struct msg *msg_first; /* first message on queue Å¥ÀÇ Ã³À½ ¸Þ¼¼Áö*/
struct msg *msg_last; /* last message in queue Å¥ÀÇ ¸¶Áö¸· ¸Þ¼¼Áö*/
time_t msg_stime; /* last msgsnd time ¸¶Áö¸·À¸·Î msgsnd°¡ ¼öÇàµÈ ½Ã°£*/
time_t msg_rtime; /* last msgrcv time ¸¶Áö¸·À¸·Î msgrcv°¡ ¼öÇàµÈ ½Ã°£*/
time_t msg_ctime; /* last change time ¸¶Áö¸·À¸·Î change°¡ ¼öÇàµÈ ½Ã°£*/
struct wait_queue *wwait;
struct wait_queue *rwait;
ushort msg_cbytes;
ushort msg_qnum;
ushort msg_qbytes; /* max number of bytes on queue Å¥ÀÇ ÃÖ´ë ¹ÙÀÌÆ® ¼ö*/
ushort msg_lspid; /* pid of last msgsnd ¸¶Áö¸·À¸·Î msgsnd¸¦ ¼öÇàÇÑ pid*/
ushort msg_lrpid; /* last receive pid ¸¶Áö¸·À¸·Î ¹ÞÀº pid*/
};
struct ipc_perm
{
key_t key;
ushort uid; /* owner euid and egid */
ushort gid;
ushort cuid; /* creator euid and egid */
ushort cgid;
ushort mode; /* access modes see mode flags below */
ushort seq; /* slot usage sequence number */
};
NOTE:Richard StevensÀÇ UNIX Network Programming 125ÂÊ¿¡ ÀÌ ÁÖÁ¦¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ë°ú À̰ÍÀÇ Á¸Àç¿Í µ¿ÀÛÀÇ º¸¾È ÀÌÀ¯µîÀÌ Àß ¼³¸íµÇ¾î ÀÖ´Ù.
Copyright (c) 1996,1997 by Euibeom.Hwang & SangEun.Oh All Rights Reserved
Email To:Webmaster ,
Another address
LAST UPDATE Nov 18,1997
Created Nov 17,1997