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

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



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

<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<chapter lang=ko> 
<!-- ÀÛ¼ºÀÚ : yundream             --> 
<!-- ÀÛ¼ºÀÏ : 2004/02/20           --> 
<!-- ¿¬¶ôó : yundream@joinc.co.kr --> 
 
<!-- ÇÔ¼ö À̸§À» ÀÔ·ÂÇÕ´Ï´Ù --> 
<title>sigwaitinfo(2)</title> 
 
<!-- ÀÌ°Ç ÇÔ¼ö¿¡ ´ëÇÑ ´ë·«ÀûÀÎ ¼³¸íÀ̱¸¿ä --> 
<para> 
    ´ë±â¿­ÀÇ ½Ã±×³ÎÀ» µ¿±âÀûÀ¸·Î ±â´Ù¸°´Ù.   
</para> 
  
<!-- ¿©±â¿¡ ÇÔ¼öÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>»ç¿ë¹ý</title> 
    <para> 
        <screen> 
#include <signal.h> 
 
int sigwaitinfo(const sigset_t *set, siginfo_t *info); 
int sigtimedwait(const  sigset_t  *set,  siginfo_t  *info, 
                 const struct timespec timeout); 
        </screen> 
    </para> 
</section> 
 
<!-- ¿©±â¿£ ÇÔ¼öÀÇ ÀÚ¼¼ÇÑ ¼³¸í ÀÌ µé¾î°©´Ï´Ù --> 
<section> 
    <title>¼³¸í</title> 
    <para> 
        sigwaitinfo()´Â ½Ã±×³Î ¼Â<emphasis>set</emphasis>¿¡ ¼³Á¤µÈ  
        ½Ã±×³ÎÁß Çϳª°¡ Àü´ÞµÉ ¶§±îÁö ´ë±âÇÑ´Ù. ¼³Á¤µÈ ½Ã±×³Î Áß Çϳª°¡ 
        Àü´ÞµÇ¸é Áï½Ã ¸®ÅÏÇÑ´Ù. ¸¸¾à <emphasis>info</emphasis>°¡ NULLÀÌ  
        ¾Æ´Ï¶ó¸é ½Ã±×³Î °ü·Ã Á¤º¸¸¦ ä¿öÁØ´Ù.      
    </para> 
    <para> 
        sigtimedwait()´Â <emphasis>timeout</emphasis>¸¸Å­ ½ÅÈ£¸¦ ±â´Ù¸®´Ù°¡  
        ½ÅÈ£°¡ ¾øÀ» °æ¿ì ¸®ÅÏÇÑ´Ù´Â °É Á¦¿ÜÇϰí´Â sigwaitinfo()¿Í µ¿ÀÏÇÏ´Ù. 
        <screen> 
struct timespec  
{ 
    long    tv_sec;         /* seconds */ 
    long    tv_nsec;        /* nanoseconds */ 
} 
        </screen> 
    </para> 
    <para> 
        ´ÙÀ½Àº <emphasis>info</emphasis>±¸Á¶Ã¼¿¡ Á¤ÀÇµÈ ¸â¹ö º¯¼öµéÀÌ´Ù.   
        <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;                                         
                                                           
#define si_fd     _sifields._sigpoll._fd                   
        </screen> 
    </para> 
</section> 
 
<!-- ÇÔ¼ö°¡ µÇµ¹·ÁÁÖ´Â °ªÀ̱¸¿ä --> 
<section> 
    <title>¹Ýȯ°ª</title> 
    <para> 
        ¼º°øÇÒ °æ¿ì sigwaitinfo(), sigtimedwait()¸ðµÎ ½Ã±×³Î ¹øÈ£¸¦ ¸®ÅÏÇÑ´Ù. 
        ½ÇÆÐÇßÀ» °æ¿ì -1À» ¸®ÅÏÇÑ´Ù.  
    </para> 
</section> 
 
<!-- ¿¡·¯°¡ ¹ß»ýÇßÀ»¶§ µÇµ¹·ÁÁÖ´Â °ªµéÀÔ´Ï´Ù --> 
<section> 
    <title>¿¡·¯</title> 
    <para> 
        <variablelist>     
            <varlistentry> 
            <term>EAGIN</term>     
            <listitem> 
                <para>     
                    sigtimedwait()¿¡¼­ <emphasis>timeout</emphasis>µ¿¾È  
                    ¾Æ¹«·± ½ÅÈ£°¡ Àü´ÞµÇÁö ¾Ê¾ÒÀ» ¤Å¤·¿ì     
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EINVAL</term>     
            <listitem> 
                <para>     
                    <emphasis>timeout</emphasis>°¡ À߸ø ¼³Á¤µÇ¾ú´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
            <varlistentry> 
            <term>EINTR</term>     
            <listitem> 
                <para>     
                    ½Ã±×³Î Çڵ鷯¿¡ ÀÇÇØ¼­ ÀÎÅÍ·´Æ®°¡ °É·È´Ù. 
                </para>     
            </listitem> 
            </varlistentry> 
        </variablelist>     
    </para> 
</section> 
 
<!-- ¸¶Áö¸·À¸·Î ¿¡Á¦ ÀÔ´Ï´Ù                                                 --> 
<!-- ¿©±â¿¡´Â ¿ÏÀüÇÑ ¿¹Á¦°¡ µé¾î°¡ Àִµ¥, ±»ÀÌ ¿ÏÀüÇÑ ¿¹Á¦¸¦ ¸¸µéÇÊ¿ä ¾øÀÌ --> 
<!-- ÄÚµå ÀϺκи¸ ÀÛ¼ºÇؼ­ ¿Ã·ÁÁּŵµ µË´Ï´Ù                               -->  
<!-- "<", ">", "&" µîÀº º¯È¯ÇØ ÁÖ¼Å¾ß Çϴµ¥, ±ÍÂúÀ¸½Ã¸é :-) º¯È¯ ÇÏÁö ¾Ê   --> 
<!-- ¾Æµµ µË´Ï´Ù. Á¦°¡ °Ë»ç ÇØ¼­ ¿Ã¸®°Ú½À´Ï´Ù                               --> 
<!-- ¿¹Á¦¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸íÀ» Àû¾îÁּŵµ µÇ±¸¿ä                            --> 
<section> 
    <title>¿¹Á¦</title> 
    <para> 
        <screen> 
#include <signal.h> 
#include <stdio.h> 
#include <unistd.h> 
 
int main() 
{ 
    struct sigaction sigact; 
    siginfo_t info; 
    int signo; 
    printf("My pid %d\n", getpid()); 
    sigemptyset(&sigact.sa_mask); 
    sigaddset(&sigact.sa_mask, SIGUSR2); 
    while(1) 
    { 
        signo = sigwaitinfo(&sigact.sa_mask, &info); 
        printf("%d : %d\n", signo, info.si_pid); 
    } 
} 
        </screen> 
        À§ ÇÁ·Î±×·¥Àº <emphasis>SIGUSR2</emphasis>°¡ Àü´ÞµÇ´Â°É ±â´Ù¸°´Ù.  
        ¸¸¾à SIGUSR2 ½Ã±×³ÎÀ» ¹Þ´Â´Ù¸é ½Ã±×³ÎÀ» Àü´ÞÇÑ ÇÁ·Î¼¼½ºÀÇ PID¸¦  
        Ãâ·ÂÇÑ´Ù. 
    </para> 
    <para> 
        ¾Æ·¡ ÇÁ·Î±×·¥Àº À§ÀÇ ¿¹Á¦¸¦ Å×½ºÆ® Çϱâ À§ÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ÀÎÀÚ·Î SIGUSR2 ½Ã±×³ÎÀ» ¹ÞÀ» PID¸¦ ÁöÁ¤ÇÑ´Ù. ½Ã±×³ÎÀ» ¹ÞÀº ÇÁ·Î±×·¥ Ãø¿¡¼­ ½Ã±×³ÎÀ» º¸³½ ÇÁ·Î¼¼½ºÀÇ PID¸¦ ¾ò¾î¿À´ÂÁö È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.  
        <screen> 
#include <signal.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 
 
int main(int argc, char **argv) 
{ 
    int pid = atoi(argv[1]); 
    printf("%d\n", getpid()); 
    while(1) 
    { 
        kill(pid, SIGUSR2); 
        sleep(1); 
        printf("OK SIG\n"); 
    } 
} 
        </screen> 
    </para> 
</section> 
<section> 
    <title>Âü°í¹®Çå</title> 
    <para> 
        <orderedlist> 
        <listitem> 
            <para> 
            <ulink url="http://www.joinc.co.kr/modules/moniwiki/wiki.php/rts1">RTS °³¿ä</ulink> 
            </para> 
        </listitem> 
        </orderedlist> 
    </para> 
</section> 
</chapter> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.