我目前不熟悉C以及bitmasking和类似的东西,需要一些有关如何使用3种方法制作程序的方法,这些方法检查是否设置了一个位然后使用以下方法进行操作 -
INSET:此函数接受两个参数,即当前信号掩码和信号编号,如果相应的信号在当前设置中,则返回1,如果不在,则返回0。
ADDSET:该功能还获取当前信号掩码和信号编号,并将相应的信号添加到当前信号集(即,将相应位位置的位设置为1)。请注意,您必须将当前信号掩码的地址传递给此函数,因为它将修改其内容。
DELSET:此功能将当前信号掩码和信号编号作为参数,并从当前信号集中删除相应的信号。请注意,您还必须将当前信号掩码的地址传递给此函数,因为它将修改其内容。
我非常知道在INSET方法中必须设置if语句,但老实说,到目前为止我写下来的是:
int INSET(unsigned char signalmask, int SIGNUM){
if (SIGNUM)
{ ... }
}
void ADDSET(unsigned char *signalmask, int SIGNUM){
}
void DELSET (unsigned char * signalmask, int SIGNUM){
}
任何有关如何简单地启动它的帮助都将不胜感激。
答案 0 :(得分:2)
问题在于确定是否设置了位N.您可以使用1 << n
将单个位移位到位置n(假设LSB位置为0),然后使用按位和(&
,不 &&
)查看掩码中是否设置了该位。