SPAN class=postbodysigaction 사용예제 br /br /signal() 함수로 사용하면 편리하지만 간혹 세부적인 signal 특성을 제어해야 할 필요성이 있는 경우가 있을겁니다. 그때 sigaction을 많이 사용하게 됩니다. br /아래의 예제는 sigaction을 어떻게 사용하는지 예제로 만들어 본겁니다. br /br //SPAN
TABLE cellSpacing=1 cellPadding=3 width=90% align=center border=0
TBODY
TR
TDSPAN class=genmedB코드:/B/SPAN/TD/TR
TR
TD class=code/* br /nbsp;Copyright (C) Information Equipment co.,LTD. br /nbsp;All rights reserved. br /nbsp;Code by JaeHyuk Cho lt;mailto:minzkn@infoeq.comgt; br /nbsp;CVSTAG=$Header$ br /*/ br /br /#include lt;stdio.hgt; br /#include lt;string.hgt; br /#include lt;signal.hgt; br /#include lt;unistd.hgt; br /br /static volatile int g_mzapi_break_count = 0; br /br /static void my_signal_handler(int s_signal) br /{ br /nbsp;g_mzapi_break_count++; br /nbsp;(void)fprintf(stdout, signal = %d, repeat_count=%d\n, s_signal, g_mzapi_break_count); br /} br /br /static void (* (mzapi_signal)(int s_signal_number, void (*s_handler)(int)))(int) br /{ br /nbsp;struct sigaction s_sigaction, s_prev_sigaction; br /#if defined(SIG_ERR) br /# if defined(NSIG) br /nbsp;if((s_handler == SIG_ERR) || (s_signal_number lt; ((int)1)) || (s_signal_number gt;= ((int)(NSIG))))return(SIG_ERR); br /#else br /nbsp;if(s_handler == SIG_ERR)return(SIG_ERR); br /# endif br /#endif br /nbsp;(void)memset((void *)(amp;s_sigaction), 0, (size_t)sizeof(s_sigaction)); br /nbsp;if(sigemptyset(amp;s_sigaction.sa_mask) == (-1))return(SIG_ERR); br /nbsp;if(sigaddset(amp;s_sigaction.sa_mask, s_signal_number) == (-1))return(SIG_ERR); br /nbsp;s_sigaction.sa_handler = s_handler, s_sigaction.sa_flags = 0; br /nbsp;(void)memset((void *)(amp;s_prev_sigaction), 0, (size_t)sizeof(s_prev_sigaction)); br /nbsp;if(sigaction((int)s_signal_number, (struct sigaction *)(amp;s_sigaction), (struct sigaction *)(amp;s_prev_sigaction)) == (-1))return(SIG_ERR); br /nbsp;return((void (*)(int))(s_prev_sigaction.sa_handler)); br /} br /br /int (main)(void) br /{ br /nbsp;void (*s_old_signal_vector)(int); br /nbsp;s_old_signal_vector = mzapi_signal(SIGINT, my_signal_handler); br /nbsp;(void)fprintf(stdout, CTRL + c key !\n); br /nbsp;do { sleep(1); }while(g_mzapi_break_count lt; 3); br /nbsp;(void)fprintf(stdout, End of sigaction test\n); br /nbsp;return(0); br /} br /br //* End of source *//TD/TR/TBODY/TABLE
STYLE type=text/css
!--
td.attachrow { font: normal 11px Verdana, Arial, Helvetica, sans-serif; color : #000000; border-color : #000000; }
td.attachheader { font: normal 11px Verdana, Arial, Helvetica, sans-serif; color : #000000; border-color : #000000; background-color: #D1D7DC; }
table.attachtable { font: normal 12px Verdana, Arial, Helvetica, sans-serif; color : #000000; border-color : #000000; border-collapse : collapse; }
--
/STYLE
br /
받은 트랙백이 없고,
댓글이 없습니다.
mzsigaction.tar.bz2
글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/154댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/154