 
 
 
 ¸®´ª½º ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ °¡À̵å
¸®´ª½º ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ °¡À̵å
/* 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