[°­ÁÂ] °øÀ¯¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÑ Ã¤ÆùæÀÇ ¿ø¸® ÀÛ¼ºÀÚ : ±è¿ëÁØ ´ëÇüÅë½Å¸Á¿¡ °¡¸é ¼­·Î Åë½ÅÀ» Çϸ鼭 äÆÃ,ÂÊÁö¸¦ º¸³»°ïÇÏÁÒ. ´Ü¼øÈ÷ »ó´ë¹æ¿¡°Ô ¸Þ¼¼Áö¸¦ º¸³»¸éµÉ°Å °¡Áö°í ¹¹±×¸® ¾î·Á¿ï°Ô Àֳİíµé ÇϽôõ±º¿ä. ±×·¡¼­ Á¦°¡ ÀÌ·¸°Ô ³ª¼­¼­ °£´ÜÇÑ °­Á¸¦ Çϳª ¸¸µì´Ï´Ù. ²¿¿Á º¸½Ã±æ À¯´Ð½º¿¡¼­ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¸é¼­ ÇÁ·Î¼¼½º Çϳª°¡ »ý¼ºµÇ°ÚÁÒ. ¾î¶² »ç¶÷Àº vi ¿¡µðÅ͸¦ »ç¿ëÇÏ°í ¾î¶² »ç¶÷Àº telnet À» ÀÌ¿ëÇØ Åë½ÅÀ» ÇÏ°í.. ±×µéÀº ¸ðµÎ µ¶¸³µÈ ¸Þ¸ð¸® ¿µ¿ªÀ» »ç¿ëÇÏ°í ÀÖÀ¸¸ç Àý´ë Áߺ¹µÈ ¸Þ¸ð¸® °ø°£À» »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. ¸¸¾à Áߺ¹µÇ°Ô »ç¿ëµÇ¸é Ãæµ¹À̳ª±â ¶§¹®ÀÌÁÒ. ÇÏÁö¸¸ ¸¸¾à ¼­·Î ¸Þ¸ð¸®¸¦ Áߺ¹µÇ°Ô »ç¿ëÇϸ鼭 Ãæµ¹µµ ¾È³­´Ù¸é ±× »çÀÌÀÇ Åë½ÅÀº °°Àº ¸Þ¸ð¸®»ó¿¡¼­ ÀÌ·ç¾îÁö±â¶§¹®¿¡ »ó´çÈ÷ ºü¸£°ÚÁÒ? ÀÌ°ÍÀ» Àß ÀÌ¿ëÇϸé äÆù浵 ¹«Áö ºü¸£°Ô ÀÛµ¿ÇÒ ¼ö ÀÖµµ·Ï ¸¸µé ¼öµµ ÀÖ´ä´Ï´Ù. ½ÇÁ¦·Î ÀÌ·± ¹æ¹ýÀ» ¸ð¸£´ø ¿¾³¯ ½ÃÀý¿¡´Â µð¹ÙÀ̽º¿¡ Á÷Á¢ echo ¸í·ÉÀ» »ç¿ëÇÏ¿© ¸Þ¼¼Áö¸¦ º¸³»´Â ¹æ½ÄÀ» »ç¿ëÇÑ Àûµµ ÀÖ¾ú´ä´Ï´Ù.(½© ÇÁ·Î±×·¡¹ÖÀ» ÀÌ¿ëÇÑ bbs) ¾îÂ¥ÇÇ ´õÀÌ»ó ¼³¸íÇغÁ¾ß ¼Ò±Í¿¡ °æÀбⰡ µÉ ¼ö ÀÖÀ¸¹Ç·Î Á÷Á¢ ½ÇÀüÀ¸·Î µé¾î°¡¼­ °£´ÜÇÑ ¼Ò½º¸¦ º¸¿©µå¸±²²¿ä. #include #define SIZE 300 #define MODE 0666 int main(int argc, char **argv) { struct shmid_ds ss; int shmid; char buf[50], *shmaddr; key_t key; /* °øÀ¯ ¸Þ¸ð¸®¸¦ »ç¿ëÇϱâÀ§ÇØ ¿©´Â ÀÛ¾÷ÀÔ´Ï´Ù. */ if ( (shmid = shmget (key, SIZE, IPC_CREAT | MODE) ) == -1 ) { printf("°øÀ¯ ¸Þ¸ð¸®¸¦ ¿­¼ö ¾ø½À´Ï´Ù. "); exit(1); } printf("°øÀ¯¸Þ¸ð¸® ¼¼±×¸ÕÆ® Áö½ÃÀÚ : %d ",shmid); if ( fork() != 0) { /* ºÎ¸ð ÇÁ·Î¼¼½º */ /* °øÀ¯¸Þ¸ð¸® ¼¼±×¸ÕÆ® Áö½ÃÀÚ(shmid) ¸¦ ÂüÁ¶ÇÏ¿© shmaddr¿¡ ³Ö´Â´Ù. */ shmaddr = shmat(shmid, NULL,MODE); strcpy(shmaddr,argv[1]); /* °øÀ¯ ¸Þ¸ð¸®¿¡ µ¥ÀÌÅÍ(shmaddr)¸¦ Áý¾î³Ö´Â´Ù. */ shmdt(shmaddr); } else { /* ÀÚ½Ä ÇÁ·Î¼¼½º */ /* °øÀ¯¸Þ¸ð¸® ¼¼±×¸ÕÆ® Áö½ÃÀÚ(shmid) ¸¦ ÂüÁ¶ÇÏ¿© shmaddr¿¡ ³Ö´Â´Ù. */ shmaddr = shmat(shmid, NULL, MODE); strcpy(buf,shmaddr); printf("%s ",buf); } } ÀÚ. ÀÌÇØ°¡ °¡¼Ì´ÂÁö¿ä? À§ÀÇ ÇÁ·Î±×·¥ÀÌ ´Ü¼øÈ÷ ÇÏ´Â ÀÏÀº ÀÌ·¸½À´Ï´Ù. shmget() ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© °øÀ¯¸Þ¸ð¸®¸¦ ¿­°í, shmat()¸¦ ÀÌ¿ëÇÏ¿© °øÀ¯¸Þ¸ð¸®ÀÇ ¼±ÅúκÐÀ» °¡Á®¿À°í, shmdt()¸¦ ÀÌ¿ëÇÏ¿© °øÀ¯¸Þ¸ð¸®¿¡ ÀڷḦ ³Ö½À´Ï´Ù. ÁÖÀÇÇÒ Á¡Àº shmget() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© Áö½ÃÀÚ¸¦ ¹ÞÀº°÷¸¸ Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù. key=shmget(); ºÎºÐ¿¡¼­ key°¡ 1Àε¥ shmat()¿¡¼­ key °ªÀ» 2·Î Çؼ­ °¡Á®¿À·ÁÇÏ¸é ¿¡·¯°¡ ³³´Ï´Ù. ÁöÁ¤µÈ ¸Þ¸ð¸®¸¸ Á¢±ÙÀÌ °¡´ÉÇϱ⶧¹®ÀÌÁÒ. ¾Ë°í º¸¸é ½±ÁÒ? ÀÚ ±×·³ ÀÌ°ÍÀ» ÀÌ¿ëÇÏ¿© ¼­·Î ´Ù¸¥ ÇÁ·Î¼¼½º¿¡¼­ ¾î¶»°Ô ÀڷḦ °øÀ¯ÇÏ´ÂÁö ¾Ë¾Æº¸ÁÒ. ÇÁ·Î±×·¥À» ¸î°¡Áö ¸¸µé°ÍÀÔ´Ï´Ù. 1. °øÀ¯¸Þ¸ð¸® ¿µ¿ª ¿­±â 2. °øÀ¯¸Þ¸ð¸®ÀÇ ¼±Åúκп¡ µ¥ÀÌÅ͸¦ ¾²±â 3. °øÀ¯¸Þ¸ð¸®ÀÇ ¼±Åúκп¡¼­ µ¥ÀÌÅ͸¦ Àбâ ÀÌ·¸°Ô ¼¼°¡ÁöÀÇ ÇÁ·Î±×·¥À» ¸¸µé°ÍÀÔ´Ï´Ù. ¸¶À½À» ´Ü´ÜÈ÷ ¸ÔÁö ¾ÊÀ¸¼Åµµ µÇ¿ä. À§¿¡ ¼Ò°³µÈ ¼¼°¡Áö ÀÌ»óÀÇ ÇÔ¼ö´Â »ç¿ëÇÏÁö ¾Ê½À´Ï´Ù. 1. °øÀ¯¸Þ¸ð¸® ¿µ¿ª ¿­±â #include #include #define SIZE 300 #define MODE 0444 int main(int argc, char **argv) { struct shmid_ds ss; int shmid; char buf[50],*shmaddr; key_t key=0; if ( (shmid = shmget (key, SIZE, IPC_CREAT | MODE) ) == -1 ) { printf(" ½ÇÆÐ"); exit(1); } printf("shmid value : %d ",shmid); } ´Ü¼øÈ÷ shmget() ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© °øÀ¯¸Þ¸ð¸® °¢ ¼¼±×¸ÕÆ®ÀÇ Áö½ÃÀÚ(shmid)¸¸ »ý¼ºµÇ°Ô ÇÏ¿´½À´Ï´Ù. Âü°í·Î key°ªÀ» 0À¸·Î ÇÏ¸é ¾ðÁ¦³ª »õ·Î¿î °øÀ¯¸Þ¸ð¸®¸¦ ÇÒ´çÇÕ´Ï´Ù. ´Ü¼øÈ÷ ÄÄÆÄÀÏÇؼ­ ½ÇÇàÇϸé ÀÌ·¸½À´Ï´Ù. (½ÇÇàÆÄÀÏ : sm_make ) $ ./sm_make shmid value : 1 $ ./sm_make shmid value : 2 $ ./sm_make shmid value : 3 $ ./sm_make shmid value : 4 ... ... ÀÌ·¸°Ô Çϳª¾¿ °è¼Ó ´Ã¾î³³´Ï´Ù. Àú 1,2,3,4... ¼ýÀÚµéÀÌ Áö½ÃÀÚÀÔ´Ï´Ù. 2. °øÀ¯¸Þ¸ð¸®ÀÇ ¼±Åúκп¡ µ¥ÀÌÅ͸¦ ¾²±â #include #define MODE 0666 int main(int argc, char **argv) { int shmid; char *shmaddr; shmid = atoi(argv[1]); shmaddr = shmat(shmid, NULL, MODE); sprintf(shmaddr,argv[2]); shmdt(shmaddr); } ¿©±â±îÁöÀÔ´Ï´Ù. ±Ý¹æ ´«Ä¡Ã«ÁÒ? ´Ü¼øÈ÷ ¾Æ±Ô¸ÕÆ® µÎ°³¸¦ ¹Þ¾Æ¼­ ù¹ø°´Â key°ª ±× ´ÙÀ½Àº data °ªÀ» ³Ö´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ½ÇÇàÇϸé ÀÌ·¸°Ô µË´Ï´Ù. (½ÇÇàÆÄÀÏ : sm_add ) $ ./sm_add 1 loveyou ( 1¹ø Áö½ÃÀÚ¿¡ loveyou ¶ó´Â ¹®ÀÚ¿­À» ÀúÀå ) $ ./sm_add 2 hohoho ( 2¹ø Áö½ÃÀÚ¿¡ hohoho ¶ó´Â ¹®ÀÚ¿­À» ÀúÀå ) ÀÚ ÀÌÁ¦ ¸¶Áö¸· ÇÁ·Î±×·¥ 3. °øÀ¯¸Þ¸ð¸®ÀÇ ¼±Åúκп¡¼­ µ¥ÀÌÅ͸¦ Àбâ include #define MODE 0666 int main(int argc, char **argv) { int shmid; char *shmaddr; shmid = atoi(argv[1]); shmaddr = shmat(shmid, NULL, MODE); printf("key : %d data : %s ",shmid,shmaddr); } ¼³¸íÀÌ ÇÊ¿ä¾øÀ»ÁÙ ¾Ð´Ï´Ù. ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù. ( ½ÇÇàÆÄÀÏ : sm_read ) $ ./sm_read 1 key : 1 data : loveyou $ ./sm_read 2 key : 2 data : hohoho ÀÌ·¸°Ô µÇÁÒ.. ¾ðÁ¦ ½Ã°£³ª¸é Á»´õ ±í°Ô ¾Ë·Áµå¸±²²¿ä. ±âÃÊ°¡ Áß¿äÇϱ⶧¹®¿¡ ÀÌ°ÍÀ» ¹ÙÅÁÀ¸·Î Çѹø ´Ù¸¥ Á¾·ùÀÇ ÇÁ·Î±×·¥À» ¸¸µé¾îº¸¼¼¿ä. ±×·³.. ¿ëÁØÀÌ´Â À̸¸.. Ãâó: http://virtual140.emde.inha.ac.kr/khdpmain/read.php3?table=tech&no=101&page=1 P.S: ½Ã°£ÀÌ µÇ´Â ´ë·Î PHP·Î Æ÷ÆÃÇؼ­ ¸¸µé¾î º¼±î »ý°¢ ÁßÀÔ´Ï´Ù.