linux 信号集

xjpcj 2015-08-16 03:53:35
问题来自与 unix环境高级编程

1.如果实现的信号数目少于一个整型量所包含的位数,则可用一位代表一个信号的方法实现信号集。我们假定一种实现有31种信号和32位整型值。
sigemptyset函数将整型量设置为0,sigfillset函数则将整型量中的各个位都设置为1。
这两个函数可以在<signal.h>头文件中实现为宏:

sigempty(ptr) (*(ptr) = 0)
sigfillset(ptr) (*(ptr) = ~(sigset_t)0, 0)

这个宏等于号(=)是怎么理解的

2书本下面实现的函数是这样的
int sigaddset(sigset_t * set,int signo){
if(SIGBAD(signo)){
errno=EINVAL;
return -1;
}

*set|=1<<(signo-1);
return 0;
}
我的理解是用32为整数来表示31位信号,比如 1表示位 001,2表示位010,如果按1<<(signo-1)这样的算法,则1和2这两种信号就每办法表示了,都为000了
...全文
152 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2015-08-17
  • 打赏
  • 举报
回复
sigfillset是逗号表达式(赋值部分+逗号+返回值0),赋值部分是对0取非,把所有bit置1。 sigadd的实现,就是0比特表示信号1,1比特表示信号2,以此类推。
nswcfd 2015-08-17
  • 打赏
  • 举报
回复
用手机回答一下,这个=不是等号,而是赋值

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧