shmat(2)
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>shmat(2)



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/06/04           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>shmat(2)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    °øÀ¯¸Þ¸ð¸® °ü·Ã ¿¬»ê         
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <sys/ipc.h> 
#include <sys/shm.h> 
 
void *shmat(int shmid, const void *shmaddr, int shmflg); 
int shmdt(const void *shmaddr); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        shmat()´Â °øÀ¯¸Þ¸ð¸® ½Äº°ÀÚÀÎ<emphasis>shmid</emphasis>¿¡ °øÀ¯ ¸Þ¸ð¸®  
        ¼¼±×¸ÕÆ®¸¦ ºÙÀ̱â À§Çؼ­ »ç¿ëÇÑ´Ù. ºÙÀÌ´Â ¿µ¿ªÀº <emphasis>shmaddr</emphasis>·Î 
        °áÁ¤ÇÒ ¼ö ÀÖ´Ù.    
    </para> 
    <para> 
        ¸¸¾à <emphasis>shmaddr</emphasis>°¡ NULLÀ̶ó¸é ½Ã½ºÅÛÀº Àû´çÇÑ »ç¿ëÇÏÁö ¾Ê´Â ¸Þ¸ð¸® 
        ¿µ¿ªÀ» ºÙÀÌ°Ô µÈ´Ù.    
    </para> 
    <para> 
        ¸¸¾à <emphasis>shmaddr</emphasis>°¡ NULLÀÌ ¾Æ´Ï°í SHM_RND°¡ shmflg·Î ÁöÁ¤µÇ¾î ÀÖ´Ù¸é  
        shmaddrÀº SHMLBAÀÇ ¹è¼öÀÇ ÁÖ¼Ò·Î ¿¬°áÀÌ ¹ß»ýÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é shmaddrÀº ¿¬°áÇÒ ¼ö  
        ÀÖ´Â Á¤·ÄµÈ ÆäÀÌÁö ÁÖ¼Ò¿©¾ß ÇÑ´Ù. 
    </para> 
    <para> 
        ¸¸ÀÏ <emphasis>SHM_RDONLY</emphasis>°¡ shmflg¿¡ ÁöÁ¤µÇ¾ú´Ù¸é, ¼¼±×¸ÕÆ®´Â ÀбâÀü¿ëÀÌ  
        µÇ¸ç °øÀ¯¸Þ¸ð¸® ¿µ¿ª¿¡ Á¢±ÙÇϰíÀÚ ÇÏ´Â ÇÁ·Î¼¼½º´Â ÀбâÀü¿ëÇã°¡ Á¢±Ù±ÇÀ» °¡Á®¾ß ÇÑ´Ù.  
        ±×·¸Áö ¾ÊÀ»°æ¿ì ¼¼±×¸ÕÆ®´Â Àбâ/¾²±â·Î ºÙ¿©Áö¸ç ÇÁ·Î¼¼½º´Â (¹Ýµå½Ã)Àбâ/¾²±â  
        Çã°¡±ÇÀ» °¡Á®¾ßÇÑ´Ù. ¾²±âÀü¿ë °øÀ¯¸Þ¸ð¸® ¼¼±×¸ÕÆ®¸¦ À§ÇÑ Ç÷¡±×´Â ¾ø´Ù. 
    </para> 
    <para> 
        ÇÁ·Î¼¼½º°¡ Á¾·áµÇ¸é ¿¬°áµÈ ¼¼±×¸ÕÆ®´Â ÀÚµ¿ÀûÀ¸·Î ºÐ¸®µÈ´Ù. µ¿ÀÏÇÑ ¼¼±×¸ÕÆ®´Â  
        Àбâ¿Í Àбâ/¾²±â·Î ÇѹøÀÌ»ó ¿¬°á½Ãų ¼ö ÀÖ´Ù.   
    </para> 
    <para> 
        shmat°¡ ¼º°øÇÏ¸é ½Ã½ºÅÛÀº shmid_ds±¸Á¶Ã¼ÀÇ ¸â¹öµéÀ» ¾Æ·¡¿Í °°ÀÌ ¾÷µ¥ÀÌÆ® ½ÃŲ´Ù. 
        <orderedlist> 
        <listitem> 
            <para> 
                shm_atimeÀ» ÇöÀç ½Ã°£À¸·Î ¼öÁ¤ÇÑ´Ù. 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
                shm_lpid¸¦ ÇöÀç È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ID·Î ¼³Á¤ÇÑ´Ù. 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
                shm_nattch´Â 1 Áõ°¡ ½ÃŲ´Ù. 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
             
    <para> 
        °øÀ¯¸Þ¸ð¸® ¼¼±×¸ÕÆ®°¡ »èÁ¦·Î Ç¥½ÃµÉ ¶§¿¡µµ ¸¶Âù°¡Áö·Î ºÐ¸®µÈ´Ù. 
    </para> 
    <para> 
        shmdt()´Â °øÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ºÎÅÍ <emphasis>shmaddr</emphasis> Áּ ºÐ¸®  
        ½Ã۱â À§Çؼ­ »ç¿ëÇÑ´Ù. °øÀ¯¸Þ¸ð¸® ¿µ¿ªÀÇ ºÐ¸®´Â shmat ½Ã½ºÅÛ ÄÝ·Î ¿¬°áµÈ °ª°ú  
        µ¿ÀÏÇÑ <emphasis>shmaddr</emphasis>À» °¡Áö°í ÀÖ´Â ¿¬°áµÈ ¿µ¿ªµéÁß Çϳª¿©¾ß ÇÑ´Ù.   
    </para> 
    <para> 
        shmdt()°¡ ¼º°øÀûÀ¸·Î È£ÃâµÇ¸é shmid_ds±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ ´ÙÀ½°ú °°ÀÌ º¯°æÇÑ´Ù. 
        <orderedlist> 
        <listitem> 
            <para> 
                shm_dtimeÀ» ÇöÀç ½Ã°£À¸·Î º¯°æÇÑ´Ù. 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
                shm_lpid¸¦ ÇöÀç È£ÃâÇÑ ÇÁ·Î¼¼½ºÀÇ ID·Î º¯°æÇÑ´Ù. 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
                shm_nattchÀ» 1 °¨¼Ò ½ÃŲ´Ù. ¸¸¾à °ªÀÌ 0ÀÌµÇ°í ¼¼±×¸ÕÆ®¿¡ »èÁ¦Ç¥½Ã°¡ µÇ¾î ÀÖ´Ù¸é 
                ¼¼±×¸ÕÆ®´Â »èÁ¦µÈ´Ù. 
            </para> 
        </listitem> 
        </orderedlist> 
        È£Ãâ ÇÁ·Î¼¼½ºÀÇ À¯Àú°ø°£¿¡ Á¡À¯µÈ ¿µ¿ªÀº ´ëÀÀÀÌ Ç®¸®Áö ¾Ê´Â´Ù. 
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        ¼º°øÇϸé 0À» ¹ÝȯÇÏ°í ½ÇÆÐÇϸé -1À» ¹ÝȯÇÑ´Ù. 
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        <variablelist>     
            <varlistentry> 
            <term>EACCES</term>     
            <listitem> 
                <para>     
                    È£ÃâÇÑ ÇÁ·Î¼¼½º°¡ ºÙÀ̱⠿øÇÏ´Â ¿µ¿ª¿¡ ´ëÇØ¼­ ±ÇÇÑÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EINVAL</term>     
            <listitem> 
                <para>     
                    À߸øµÈ shmid °ª, ȤÀº À߸øµÈ shmaddr °ªÀ» °¡Áö°í ÀÖ´Ù.  
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>ENOMEM</term>     
            <listitem> 
                <para>     
                    ¸Þ¸ð¸®ÇÒ´çÀ» ÇÒ ¼ö ¾ø´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
#include <sys/ipc.h>  
#include <sys/shm.h>  
#include <string.h>  
#include <unistd.h>  
 
 
int main() 
{ 
    int shmid; 
    int pid; 
 
    int *cal_num; 
    void *shared_memory = (void *)0; 
 
 
    // °øÀ¯¸Þ¸ð¸® °ø°£À» ¸¸µç´Ù. 
        // Å©±â´Â 4byte·Î ÇÑ´Ù. 
    shmid = shmget((key_t)1234, sizeof(int), 0666|IPC_CREAT); 
 
    if (shmid == -1) 
    { 
        perror("shmget failed : "); 
        exit(0); 
    } 
 
    // ÇÁ·Î¼¼½º ¸Þ¸ð¸®¸¦ °øÀ¯¸Þ¸ð¸®¿µ¿ª¿¡ ºÙÀδÙ.  
    shared_memory = shmat(shmid, (void *)0, 0); 
    if (shared_memory == (void *)-1) 
    { 
        perror("shmat failed : "); 
        exit(0); 
    } 
 
    cal_num = (int *)shared_memory; 
    pid = fork(); 
    if (pid == 0) 
    { 
        shmid = shmget((key_t)1234, sizeof(int), 0); 
        if (shmid == -1) 
        { 
            perror("shmget failed : "); 
            exit(0); 
        } 
        shared_memory = shmat(shmid, (void *)0, 0666|IPC_CREAT); 
        if (shared_memory == (void *)-1) 
        { 
            perror("shmat failed : "); 
            exit(0); 
        } 
        cal_num = (int *)shared_memory; 
        *cal_num = 1; 
 
        while(1) 
        { 
            *cal_num = *cal_num + 1; 
            printf("child %d\n", *cal_num);  
            sleep(1); 
        } 
    } 
 
    // ºÎ¸ð ÇÁ·Î¼¼½º·Î °øÀ¯¸Þ¸ð¸®ÀÇ ³»¿ëÀ» º¸¿©ÁØ´Ù.  
    else if(pid > 0) 
    { 
        while(1) 
        { 
            sleep(1); 
            printf("%d\n", *cal_num); 
        } 
    } 
} 
        </screen> 
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_°øÀ¯¸Þ¸ð¸®¿Í_¼¼¸¶Æ÷¾î¸¦_ÀÌ¿ëÇÑ_ÇÁ·Î¼¼½º°£_µ¥ÀÌÅÍó¸®">°øÀ¯ ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÑ ÇÁ·Î¼¼½º°£ µ¥ÀÌÅÍ ±³È¯</ulink> 
            </para> 
         
        </listitem> 
        <listitem> 
            <para> 
            ftok(3) 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            ipc(5)             
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            shmctl(2) 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            shmat(2) 
            </para> 
        </listitem> 
        <listitem> 
            <para> 
            shmdt(2) 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.