ÃÑ ÆäÀÌÁö ¼ö : 3224

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



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
Describe docbook_fcntl(2) here
  • ¹Ì¿Ï¼º
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/01/14           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>fcntl(2)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ÆÄÀÏ ÁöÁ¤ÀÚÀÇ Á¶ÀÛ 
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <unistd.h> 
#include <fcntl.h> 
 
int fcntl(int fd, int cmd); 
int fcntl(int fd, int cmd, long arg); 
int fcntl(int fd, int cmd, struct flock * lock); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        fcntl()Àº ÀÎÀÚ·Î ÁÖ¾îÁø ÆÄÀÏ ±â¼úÀÚ<emphasis>fd</emphasis>¿¡ ´ëÇØ¼­  
        ¿©·¯°¡Áö ¿¬»êÀ» ¼öÇàÇÑ´Ù. ¿¬»êÀÇ Á¾·ù´Â <emphasis>cmd</emphasis>¿¡  
        ÀÇÇØ¼­ °áÁ¤µÈ´Ù. 
    </para> 
    <para> 
        ´ÙÀ½Àº °¡´ÉÇÑ ¿¬»ê <emphasis>cmd</emphasis>ÀÇ Á¾·ù´Ù. 
        <variablelist>     
            <varlistentry> 
            <term>F_DUPFD</term>     
            <listitem> 
                <para>     
                    dup(2)¿Í ¸Å¿ì ºñ½ÁÇѵ¥  ÆÄÀÏÀÌ º¹»çµÉ ¶§  
                    <emphasis>arg</emphasis>º¸´Ù  
                    Å©°Å³ª µ¿ÀÏÇÑ °¡Àå ³·Àº ¼ýÀÚ¸¦ ÆÄÀÏ ÁöÁ¤¹øÈ£·Î Çϰí, ±×°ÍÀ» 
                    <emphasis>fd</emphasis>ÀÇ º¹»çº»ÀÌ µÇµµ·Ï ÇÑ´Ù. dup2(2)ÀÇ  
                    °æ¿ì ¾ö¹ÐÇÏ°Ô ÁöÁ¤µÈ ±â¼úÀÚ¸¦ »ç¿ëÇÑ´Ù.   
                </para> 
                <para> 
                    ¿À·¡µÈ ±×¸®°í »õ·Î¿î ±â¼úÀÚµéÀº ±³´ëÀûÀ¸·Î »ç¿ëµÉ ¼ö  
                    ÀÖ´Ù. À̵éÀº Àá±Ý(lock), ÆÄÀÏ À§Ä¡ Æ÷ÀÎÅÍ ±×¸®°í Ç÷¡±×¸¦  
                    °øÀ¯ÇÑ´Ù. ¿¹¸¦ µé¸é ±â¼úÀÚÁß Çϳª¿¡¼­ ÆÄÀÏ À§Ä¡°¡ lseek(2)¸¦ 
                    ÅëÇØ¼­ º¯°æµÇ¾ú´Ù¸é ´Ù¸¥ °Íµµ º¯°æµÉ ¼ö ÀÖ´Ù.  
                </para> 
                <para> 
                    µÎ ±â¼úÀÚµéÀº close-on-exec Ç÷¡±×¸¦ °øÀ¯ÇÏÁö ¾Ê´Â´Ù. ±×·¯³ª 
                    º¹Á¦º»ÀÇ close-on-exec Ç÷¡±×´Â ±âº»ÀûÀ¸·Î off »óŰ¡ µÈ´Ù.  
                </para> 
                <para> 
                    ¼º°øÇÏ¸é »õ·Î¿î ±â¼úÀÚ°¡ ¸®ÅϵȴÙ.     
                </para> 
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>F_GETFD</term> 
            <listitem>     
                <para> 
                    close-on-exec¸¦ Àд´Ù. ¸¸ÀÏ <emphasis>FD_CLOEXEC</emphasis>ºñÆ®°¡ 0À̸é,  
                    ÆÄÀÏÀº exec¸¦ ÅëÇØ ¿­¸° »óÅ·Π³²°ÜÁö°í ±×·¸Áö ¾ÊÀ¸¸é ´ÝÈù´Ù. 
                </para> 
            </listitem>     
            </varlistentry> 
            <varlistentry> 
            <term>F_SETFD</term> 
            <listitem>     
                <para> 
                    close-on-exec Ç÷¡±×¸¦ <emphasis>arg</emphasis>ÀÇ FD_CLOEXECºñÆ®¿¡ ÀÇÇØ  
                    ÁöÁ¤µÈ °ªÀ¸·Î ¼³Á¤ÇÑ´Ù.  
                </para> 
            </listitem>     
            </varlistentry> 
            <varlistentry> 
            <term>F_GETFL</term>     
            <listitem>     
                <para>     
                    ÆÄÀÏ ÁöÁ¤ÀÚÀÇ Ç÷¡±×¸¦ Àд´Ù. open(2)ÀÇ ÀÇÇØ ¼³Á¤µÈ ¸ðµç  
                    Ç÷¡±×µéµµ ¸®ÅϵȴÙ. 
                </para> 
            </listitem>     
            </varlistentry> 
            <varlistentry> 
            <term>F_SETFL</term>     
            <listitem>     
                <para>     
                    <emphasis>arg</emphasis>¿¡ ÀÇÇØ ÁöÁ¤µÈ °ªÀ» ÆÄÀÏ ÁöÁ¤ÀÚÀÇ Ç÷¡±×·Î  
                    ¼³Á¤ÇÑ´Ù. ´ÜÁö <emphasis>O_APPEND</emphasis>,<emphasis>O_NONBLOCK</emphasis> 
                    <emphasis>O_ASYNC</emphasis>¸¸ÀÌ ¼³Á¤¿¡ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´Ù¸¥ Ç÷¡±×µéÀº  
                    ¿µÇâÀ» ¹ÞÁö ¾Ê´Â´Ù.  
                </para> 
                <para> 
                    Ç÷¡±×µéÀº dup(2), fork(2)·Î ¸¸µé¾îÁø ÆÄÀÏ ±â¼úÀÚÀÇ º¹»çº»µé »çÀÌ¿¡ 
                    °øÀ¯µÈ´Ù. 
                </para> 
                <para> 
                    Ç÷¡±×ÀÇ ÀÚ¼¼ÇÑ ¼³¸íÀº open(2)¸¦ Âü°íÇϱ⠹ٶõ´Ù. 
                </para> 
            </listitem>     
            </varlistentry> 
        </variablelist>     
    </para> 
    <para> 
        F_GETLK, F_SETLK, F_SETLKW µéÀº ÆÄÀÏÀÇ (±Ç°í)Àá±ÝÀ» °ü¸®Çϱâ À§ÇÑ  
        ¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù.     
        ¼¼¹øÂ° ÀÎÀÚ <emphasis>lock</emphasis>´Â ±¸Á¶Ã¼ flock¿¡ ´ëÇÑ Æ÷ÀÎÅÍ´Ù. Àá±ÝÀº  
        ·¹ÄÚµå´ÜÀ§·Î ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù.  flock±¸Á¶Ã¼´Â ´ÙÀ½°ú °°´Ù. 
        <screen> 
struct flock { 
    ... 
    short l_type;    /* Type of lock: F_RDLCK, 
                        F_WRLCK, F_UNLCK */ 
    short l_whence;  /* How to interpret l_start: 
                        SEEK_SET, SEEK_CUR, SEEK_END */ 
    off_t l_start;   /* Starting offset for lock */ 
    off_t l_len;     /* Number of bytes to lock */ 
    pid_t l_pid;     /* PID of process blocking our lock 
                        (F_GETLK only) */ 
    ... 
}; 
        </screen> 
        <emphasis>l_whence</emphasis>, <emphasis>l_start</emphasis>,  
        <emphasis>l_len</emphasis> Çʵå´Â ÆÄÀÏ¿¡¼­ Àá±Û ·¹ÄÚµåÀÇ ¹üÀ§¸¦ ÁöÁ¤Çϱâ À§Çؼ­  
        »ç¿ëµÈ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº 
        <ulink url=http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_fcntlÀ»_ÀÌ¿ëÇÑ_ÆÄÀÏ_·¹ÄÚµåÀá±Ý>fcntlÀ» ÀÌ¿ëÇÑ ÆÄÀÏ ·¹ÄÚµå Àá±Ý</ulink>À» 
        Âü°íÇϱ⠹ٶõ´Ù.  
        <variablelist>     
            <varlistentry> 
            <term>F_GETLK</term>     
            <listitem>     
                <para>     
                    Àá±ÝÀÌ ÀÖ´Â Áö¸¦ ¾Ë¾Æ³½´Ù. Àá±ÝÀÌ ÀÖ´Ù¸é flock±¸Á¶Ã¼¸¦ ¸®ÅÏÇ졒  
                    Àá±ÝÀ» ¾òÀ» ¼ö ÀÖ´Ù¸é Àá±ÝÀÇ <emphasis>l_type</emphasis>Çʵ带  
                    F_UNLCK À¸·Î ¼³Á¤ÇÑ´Ù.   
                </para> 
            </listitem>     
            </varlistentry> 
            <varlistentry> 
            <term>F_SETLK</term> 
            <listitem> 
                <para> 
                    <emphasis>l_type</emphasis>ÀÌ F_RDLCK ³ª  F_WRLCK ÀÏ °æ¿ì »ç¿ë°¡´ÉÇÏ¸ç   
                    Àá±ÝÀ» ¿äûÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ¸¸¾à ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀÌ¹Ì Àá±ÝÀ»  
                    »ç¿ëÇϰí ÀÖ´Ù¸é -1À» ¸®ÅÏÇÑ´Ù. <emphasis>errno</emphasis>´Â  
                    EACCES ³ª EAGAIN ÀÌ ¼³Á¤µÈ´Ù.   
                </para> 
            </listitem> 
            </varlistentry> 
 
            <varlistentry> 
            <term>F_SETLKW</term> 
            <listitem> 
                <para> 
                    F_SETLK ¿Í ¸¶Âù°¡Áö·Î Àá±ÝÀ» ¿äûÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ±×·¯´Ù  
                    ´Ù¸¥ ÇÁ·Î¼¼½º°¡ Àá±ÝÀ» °¡Áö°í ÀÖ´õ¶óµµ ¿¡·¯¸¦ ¸®ÅÏÇÏÁö´Â ¾Ê°í  
                    ¾òÀ» ¼ö ÀÖÀ» ¶§±îÁö ±â´Ù¸°´Ù. ±â´Ù¸®´Â Áß¿¡ ½Ã±×³Î°ú °°Àº  
                    ÀÎÅÍ·´Æ®(interrupted)°¡ ¹ß»ýÇϸé Áï½Ã ¸®ÅÏÇÑ´Ù.  
                    À̰æ¿ì -1ÀÌ ¸®Åϵǰí <emphasis>errno</emphasis>·Î EINTRÀÌ ¼³Á¤µÈ´Ù.  
                </para> 
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
    <para> 
        fcntl()Àº ¶ÇÇÑ ½Ã±×³Î °ü¸®¸¦ À§Çؼ­ F_GETOWN, F_SETOWN, F_GETSIG, F_SETSIG¸¦  
        Á¦°øÇÑ´Ù. ÀÌµé ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ ÀÔÃâ·Â°ú °ü·ÃµÈ ½Ã±×³ÎÀ» Á¦¾îÇÒ ¼ö ÀÖ´Ù.       
        <variablelist>     
            <varlistentry> 
            <term>F_GETOWN/term>     
            <listitem>     
                <para>     
                    ÆÄÀÏ ÁöÁ¤ÀÚ<emphasis>fd</emphasis>¿¡¼­ ¹ß»ýÇÏ´Â  
                    SIGIO¿Í SIGURG ½Ã±×³ÎÀ» ¹ÞÀ» ÇÁ·Î¼¼½ºÀÇ ID³ª ±×·ì ID¸¦ ¾ò¾î¿Â´Ù.  
                    ÇÁ·Î¼¼½º ±×·ìÀÏ °æ¿ì 0º¸´Ù ÀÛÀº ¼ö°¡ ¸®ÅϵȴÙ.        
                </para> 
            </listitem>     
            </varlistentry> 
 
            <varlistentry> 
            <term>F_SETOWN/term>     
            <listitem>     
                <para>     
                    ÆÄÀÏ ÁöÁ¤ÀÚ<emphasis>fd</emphasis>¿¡¼­ ¹ß»ýÇÏ´Â À̺¥Æ®ÀÎ SIGIO¿Í  
                    SIGURG¸¦ ¹ÞÀ» ÇÁ·Î¼¼½º ID³ª ±×·ì ID¸¦ ÁöÁ¤ÇÑ´Ù. ÇÁ·Î¼¼½º ±×·ìÀ¸·Î  
                    ÁöÁ¤ÇÏ±æ ¿øÇÑ´Ù¸é 0º¸´Ù ÀÛÀº ¼ö¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.  
                </para> 
                <para> 
                    ¸¸¾à ÆÄÀÏÁöÁ¤ÀÚ¿¡ O_ASYNC Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é  
                    (open(2)½Ã ÁöÁ¤Çϰųª fcntl()À» ÅëÇØ ÁöÁ¤°¡´É ÇÏ´Ù.) ÆÄÀÏ ÁöÁ¤ÀÚ¿¡  
                    ÀÔÃâ·Â À̺¥Æ®°¡ ÀÖÀ» ¶§ SIGIO°¡ ¹ß»ýÇÑ´Ù. 
                </para> 
            </listitem>     
            </varlistentry> 
 
            <varlistentry> 
            <term>F_GETSIG/term>     
            <listitem>     
                <para>     
                    ÀÔÃâ·Â À̺¥Æ®°¡ ¹ß»ýÇßÀ» ¶§ ½Ã±×³ÎÀ» Á¤¼ÛÇϵµ·Ï ÇÑ´Ù. 0Àº SIGIO°¡  
                    Àü¼ÛµÊÀ» ÀǹÌÇÑ´Ù. ´Ù¸¥ °ªÀÌ µé¾î°£´Ù¸é ´Ù¸¥ ½Ã±×³ÎÀÌ Àü¼ÛµÉ °ÍÀÌ´Ù. 
                    ÀÌ·± °æ¿ì SA_SIGINFO°¡ ½Ã±×³Î Çڵ鷯¿¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é Ãß°¡ÀûÀÎ  
                    Á¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.  
                </para> 
            </listitem>     
            </varlistentry> 
            <varlistentry> 
            <term>F_SETSIG/term>     
            <listitem>     
                <para>     
                    ÀÔÃâ·Â À̺¥Æ®°¡ ¹ß»ýÇßÀ» ¶§ ½Ã±×³ÎÀ» Á¤¼ÛÇϵµ·Ï ÇÑ´Ù. 0Àº SIGIO°¡  
                    Àü¼ÛµÊÀ» ÀǹÌÇÑ´Ù. (SIGIO¸¦ Æ÷ÇÔÇÑ) ´Ù¸¥ °ªÀÌ ¼³Á¤µÇ¾ú´Ù¸é ÇØ´ç  
                    ½Ã±×³ÎÀÌ Àü¼ÛµÈ´Ù. SA_SIGINFO°¡ ½Ã±×³Î Çڵ鷯¿¡ ¼³Á¤µÇ¾î ÀÖ´Ù¸é  
                    Ãß°¡ÀûÀÎ Á¤º¸¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.   
                </para> 
                <para> 
                    F_SETSIG°¡ 0ÀÌ ¾Æ´Ñ °ªÀ¸·Î ¼³Á¤µÇ°í SA_SIGINFO°¡ ½Ã±×³Î Çڵ鷯¿¡  
                    Àû¿ëµÇ¾î ÀÖ´Ù¸é(sigaction(2)Âü°í) ÀÔÃâ·Â¿¡ ´ëÇÑ ºÎ°¡ÀûÀÎ Á¤º¸¸¦  
                    <emphasis>siginfo_t</emphasis>±¸Á¶Ã¼¸¦ ÅëÇØ¼­ ¹Þ¾Æ º¼ ¼ö ÀÖ´Ù.  
                    ´ÙÀ½Àº siginfo_t ±¸Á¶Ã¼ÀÇ ±¸Á¶´Ù.  
                    <screen> 
typedef struct siginfo { 
   int si_signo;     /* Signal number */ 
   int si_errno;     /* Error code */ 
   int si_code; 
   pid_t si_pid; 
   uid_t si_uid; 
   void *si_addr;  
   union sigval si_value; 
   union { 
      /* Skipping other fields */ 
      struct { 
         int _band;  /* Socket event flags (similar to poll) */ 
         int _fd;    /* Socket fd where event occurred */ 
      } _sigpoll; 
   } _sifields; 
}  siginfo_t; 
                    </screen> 
                </para> 
                <para> 
                    POSIX.1b Real Time Signal (value°¡ SIGRTMINº¸´Ù Ŭ°æ¿ì)ÀÌ  
                    ¼±ÅõǾú´Ù¸é, ´ÙÁßÀÇ ÀÔÃâ·Â À̺¥Æ®¸¦ Å¥(queue)¿¡ ´ã¾Æ¼­  
                    °ü¸®ÇÒ ¼ö ÀÖ´Ù. RTS¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº <xref linkend="refer">¸¦  
                    Âü°íÇϱ⠹ٶõ´Ù. 
                </para> 
            </listitem>     
            </varlistentry> 
        </variablelist>     
    </para> 
    <para> 
        ¿©±â¿¡¼­ Á¦°øÇÏ´Â ¸í·ÉµéÀ» ÀÌ¿ëÇϸé select(2)³ª poll(2)ÀÇ »ç¿ë¾øÀÌ ºñµ¿±âÀûÀ¸·Î  
        ÀÔÃâ·ÂÀ» ´Ù·ê ¼ö ÀÖ´Ù.       
    </para> 
    <para> 
        O_ASYNC, F_GETOWN, F_SETOWN Àº BSD¿Í Linux¿¡¼¶ »ç¿ë°¡´ÉÇÏ´Ù. F_GETSIG¿Í F_SETSIG´Â  
        ¸®´ª½º¿¡¼­¸¸ »ç¿ë°¡´ÉÇÏ´Ù.  
        POSIX´Â asynchronous I/O¿Í <emphasis>aio_sigevent</emphasis> 
        ±¸Á¶Ã¼¸¦ ÀÌ¿ëÇØ¼­ fcntl(2)°ú ºñ½ÁÇÑ ±¸ÇöÀ» ¸¸µé ¼ö ÀÖ´Ù.  
        ÃÖ±Ùµé¾î ¸®´ª½ºµµ À̵éÀ» Áö¿øÇÏ°Ô µÇ¾ú´Ù. 
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        ¿¡·¯°¡ ¹ß»ýÇϸé (struct utmp *)0 À» µÇµ¹·ÁÁØ´Ù. 
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
    </para> 
</section> 
 
<!-- °¢Á¾ Âü°í¹®Çå                      --> 
<section id="refer"> 
    <title>Âü°í¹®Çå</title> 
    <para> 
    </para> 
</section> 
</chapter> 
 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.