LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1205|回复: 2

C( help )

[复制链接]
发表于 2002-9-22 00:43:39 | 显示全部楼层 |阅读模式
兄弟写了个小小程序,用到 sigaction () 函数,其中用 sigaddset () 函数将 SIGINT 信号加到了 sa_mask 中去,程序如下:


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


void ouch ( int sig )
{
printf ( "OUCH! - I got signal %d\n", sig ) ;
printf ( "\a" ) ;
}


int main ()
{
struct sigaction act ;
int mark ;

act.sa_handler = ouch ;
act.sa_flags = 0 ;
sigaddset ( &act.sa_mask, SIGINT ) ;


/*

mark = sigismember ( &act.sa_mask, SIGINT ) ;
if ( mark )
printf ( "Signal SIGINT is a member of the sa_mask \n\n\n" ) ;
else
printf ( "Signal SIGINT is not included in the sa_mask\n\n\n" ) ;

*/ 测试用



sigaction ( SIGINT, &act, 0 );

while ( 1 ) {
printf ( "Hello world! \n" ) ;
sleep ( 1 ) ;
}
}


运行后按 Ctrl-c 仍然输出 OUCH! - I got signal 2 ,而 SIGINT 确实在 sa_mask 中,我认为此时该信号已被屏蔽了,进程也不可能收得到,但是它又确实收到了,不解,望大哥指点!!谢了先!!!!!!!
发表于 2002-9-22 00:49:17 | 显示全部楼层
我不懂程序方面的,我把这个文件存成text.sh,然后运行出错如下。
[beinan@Linuxsir root]$ sh text.sh
text.sh: line 6: syntax error near unexpected token `('
text.sh: line 6: `void ouch ( int sig )'
[beinan@Linuxsir root]$

象第六行有点问题。。哈。。。不懂,乱测一下。请高手兄弟来指点。。。多谢。。
 楼主| 发表于 2002-9-22 01:16:27 | 显示全部楼层
谢谢,但我想这一行应该没有问题的,我只是想知道么那个 sigaction() 函数中的 sa_mask 域究竟是怎样工作的,望指教!!!!!!!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表