linux man page : sigqueue - ´ë±â¿­ ±â¹Ý ½Ã±×³Î Àü¼Û
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



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

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=sigqueue">sigqueue</a>(2)

1장. sigqueue(2)

차례
1.1절. »ç¿ë¹ý
1.2절. ¼³¸í
1.3절. ¹Ýȯ°ª
1.4절. ¿¡·¯
1.5절. ¿¹Á¦

´ë±â¿­ ±â¹Ý ½Ã±×³Î¹× µ¥ÀÌÅÍ Àü¼Û


1.1절. »ç¿ë¹ý

#include <signal.h>

int sigqueue(pid_t pid, int sig, const union sigval value);
		


1.2절. ¼³¸í

sigqueue´Â ÁöÁ¤µÈ ½Ã±×³Î¹øÈ£ sig¸¦ PID°¡ pidÀÎ ÇÁ·Î¼¼½º ¿¡°Ô º¸³½´Ù.


1.3절. ¹Ýȯ°ª

¼º°øÇÒ°æ¿ì 0À» ½ÇÆÐÇßÀ»°æ¿ì¿¡´Â -1À» ¹ÝȯÇϸç, Àû´çÇÑ errno °ªÀ» ¼³Á¤ÇÑ´Ù. kill(2)°ú ¸Å¿ì ºñ½ÁÇÏ°Ô ÀÛµ¿Çϸç, kill(2)°ú ¸¶Âù°¡Áö·Î null ½Ã±×³ÎÀ» ÀÌ¿ëÇØ¼­ ÇÁ·Î¼¼½º°¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

value¸¦ ÀÌ¿ëÇØ¼­ ½Ã±×³Î°ú ÇÔ²² ÇÊ¿äÇÑ µ¥ÀÌÅ͸¦ ÇÔ²² Àü¼ÛÇÒ¼öµµ ÀÖ´Ù. value´Â ´ÙÀ½°ú °°Àº ŸÀÔÀ» °¡Áø´Ù.

union sigval
{
    int sival_int;
    void *sival_ptr;
};
		
¸¸¾à ½Ã±×³Î°ú ÇÔ²² µ¥ÀÌÅ͸¦ Àü¼Û ¹Þ±â¸¦ ¿øÇÑ´Ù¸é sigaction(2)À» ÀÌ¿ëÇØ¼­ SA_SIGINFOÇ÷¹±×¸¦ ¼³Á¤ÇÏ°í ½Ã±×³ÎÇڵ鷯ÀÇ µÎ¹øÂ° ÀÎÀÚ¸¦ siginfo_t·Î ¼³Á¤ÇÏ¸é µÈ´Ù. ¹Þ´ÂÃø ¿¡¼­´Â ´ë±â¿­ ±â¹Ý ½Ã±×³ÎÀÎÁö È®ÀÎÀ» À§Çؼ­ siginfo_tÀÇ si_code °¡ SI_QUEUEÀÎÁö¸¦ °Ë»çÇÏ¸é µÈ´Ù.


1.4절. ¿¡·¯

EINVAL

À߸øµÈ ½Ã±×³Î

EPERM

½ÅÈ£¸¦ ¹ÞÀ» ÇÁ·Î¼¼½º¿¡ ´ëÇÑ ±ÇÇÑÀÌ ¾ø´Ù.

ESRCH

½ÅÈ£¸¦ ¹ÞÀ» ÇÁ·Î¼¼½ºÀÇ PID°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.


1.5절. ¿¹Á¦

#include <signal.h>

#include <stdio.h>
#include <unistd.h>

/* 
 * ½Ã±×³Î Çڵ鷯
 * si_code°¡ SI_QUEUE ÀÎÁö¸¦ È®ÀÎÇÑÈÄ ¿øÇÏ´Â ÀÛ¾÷À» ÇÑ´Ù.  
 * SI_QUEUEÀÏ °æ¿ì RTSÇü½ÄÀ¸·Î Àü´ÞµÈ ½Ã±×³ÎÀ̸ç 
 * ±×·¸Áö ¾ÊÀ»°æ¿ì Ç¥ÁØ À¯´Ð½º ½Ã±×³ÎÀÌ´Ù.  
 */
void sighandler(int signo, siginfo_t *si)
{
    if(si->si_code == SI_QUEUE)
    {
        printf("User RTS signal %d\n", si->si_pid);
        printf("Sig  Number %d\n",     si->si_signo);
        printf("User Data is %d\n",    si->si_value.sival_int);
        // ½Ã±×³ÎÀÌ Å¥À׵ǴÂÁö È®ÀÎÇϱâ À§ÇÑ ÄÚµå
        getchar();
    }
    else
    {
        // killµîÀ» ÀÌ¿ëÇØ¼­ Ç¥ÁØ À¯´Ð½º ½Ã±×³ÎÀ» º¸³ÂÀ» °æ¿ì
        // ½ÇÇàµÇ´Â ·çƾ 
        printf("Get none realtime signal %d\n", signo); 
    }
}

int main()
{
    struct sigaction sigact;

    printf("My pid %d\n", getpid());

    /*
     * sa_flags¸¦ SA_SIGINFO·Î ¼³Á¤Çϰí 
     * ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇÑ´Ù. 
     */
    sigemptyset(&sigact.sa_mask);
    sigact.sa_flags     = SA_SIGINFO;
    sigact.sa_restorer  = NULL; 
    sigact.sa_sigaction = sighandler; 

    /*
     * RTS½Ã±×³Î¿¡ ´ëÇÑ Çڵ鷯¸¦ ¼³Ä¡ÇÑ´Ù.  
     */
    if (sigaction(SIGRTMIN, &sigact, 0) == 1)
    {
        printf("signal error\n");
        exit(0);
    }   
    while(1)
    {
        sleep(1);
    }   
}
		
À§ ¿¹Á¦´Â ½Ã±×³ÎÀ» ¹Þ´Â ¿¹Á¦ ÇÁ·Î±×·¥À¸·Î ´ë±â¿­ ±â¹ÝÀÇ ¸®¾óŸÀÓ ½Ã±×³Î¿¡ ´ëÀÀÇÑ´Ù. ÇÁ·Î±×·¥ ÀÛµ¿¹æ½Ä°ú ¿¹Á¦¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº Real Time Signal - 1À» Âü°íÇϱ⠹ٶõ´Ù.

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.