我必须使用我学校提供的代码,但我不了解这个关于轮班的功能,但是我不知道
如果有人可以帮助我。这真的很不错。
谢谢!
答案 0 :(得分:5)
这太复杂了。在每次迭代中,只需单击一下,就可以更好地移动位模式:
int c ;
for (c = 'e'; c; c>>=1)
{
kill(pid, (c & 1) ? SIGUSR1 : SIGUSR2);
}
作为一个副作用,这可以避免魔法常数8
(应该是CHAR_BIT
,恕我直言)
kill(pid, SIGUSR2);
需要完成这项工作。
答案 1 :(得分:1)
这是编写c & (1 << charac)
的可怕方式。它测试是否设置了charac'th位,然后使用SIGUSR1,否则使用SIGUSR2。
答案 2 :(得分:1)
对于初学者,ASCII中的字符e是十六进制65
=二进制01100101
代码的作用是在每次迭代时将该值向右移一位,当移位后最右边的位为1时,它会触发SIGUSR1,否则触发SIGUSR2。
现在,如果你问我代码的有用效果是什么,我就不知道了。
答案 3 :(得分:0)
c >> charac
将位移位右边的charac次数(因此,如果charax为3,则将右移位3次
& 1
测试最低位是否设置
? SIGUSr1 : SIGUSR2
这使用了前一个测试的结果,如果它的设置,则使用sigusr1,否则使用sigusr2