gpt4 book ai didi

c - 你好,关于《APUE》中10.11的信号源

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:11 25 4
gpt4 key购买 nike

我看了《APUE》,我发现10.11的例子不能创建正确的答案。10.11 文件是:

static void sig_quit( int );

int main( void )
{
sigset_t newmask, oldmask, pendmask;

if ( signal( SIGQUIT, sig_quit ) == SIG_ERR )
err_sys( "can't catch SIGQUIT" );

sigemptyset( &newmask );
sigaddset( &newmask, SIGQUIT );

/* block SIGQUIT and save current signal mask */
if ( sigprocmask( SIG_BLOCK, &newmask, &oldmask ) < 0 )
err_sys( "SIG_BLOCK error" );

sleep( 5 ); /* SIGQUIT here will remain pending */

if ( sigpending( &pendmask ) < 0 )
err_sys( "sigpending error" );
if ( sigismember( &pendmask, SIGQUIT ) )
printf( "\nSIGQUIT pengding\n" );

/* reset signal mask which unblocks SIGQUIT */
if ( sigprocmask( SIG_SETMASK, &oldmask, NULL ) > 0 )
err_sys( "SIG_SETMASK error" );
printf( "SIGQUIT unblocked\n" );

sleep( 5 ); /* SIGQUIT here will terminate with core file */

exit( 0 );
}

static void sig_quit( int signo )
{
printf( "caught SIGQUIT\n" );

if ( signal( SIGQUIT, SIG_DFL ) == SIG_ERR )
err_sys( "can't reset SIG_QUIT" );

return ;
}

当我执行 ./a.out 并在不到 5 秒内键入 ctrl+c 时,程序将立即结束。如果它在《APUE》中以正确的方式工作,它会打印:

^\
SIGQUIT pending
caught SIGQUIT
SIGQUIT unblocked
^\Quit(coredump)

我是一个学习信号的新人。请问我如何理解为什么?当出现其他错误时,我可以使用 gdb。但是信号,所以请,谢谢我在 ubuntu 10.04 上工作

最佳答案

CTRL+C 生成SIGINTCTRL-\ 生成SIGQUIT。参见 Termination Signals - the GNU C Library

关于c - 你好,关于《APUE》中10.11的信号源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com