我必须使用我学校提供的代码,但我不明白这个关于轮班的功能,逐位
如果有人可以帮助我。这将是非常好的。
谢谢!
它过于复杂。在每次迭代中通过单击来更好地移动位模式:
int c ;
for (c = 'e'; c; c>>=1)
{
kill(pid, (c & 1) ? SIGUSR1 : SIGUSR2);
}
作为副作用,这避免了魔法常数8
(应该是CHAR_BIT
,恕我直言)
顺便说一句:这段代码并不完全等价,原来的总是发出 8 次 kill() 调用,这一次将在第七次之后停止 (给定 CHAR_BIT==8) ,所以额外
kill(pid, SIGUSR2);
将需要完成这项工作。
对于初学者,ASCII 中的字符 e 是 hex 65
= binary01100101
代码的作用是在每次迭代时将该值再右移一位,当移位后最右边的位为 1 时,它会触发 SIGUSR1,否则触发 SIGUSR2。
现在,如果您问我该代码的有用效果可能是什么,我不知道。
这是一种可怕的写作方式c & (1 << charac)
。它测试是否设置了第 charac'th 位,然后使用 SIGUSR1,否则使用 SIGUSR2。
c >> charac
将位向右移动 charac 次(因此如果 charax 为 3,它将向右移动 3 次
& 1
测试要设置的最低位是否已设置
? SIGUSr1 : SIGUSR2
this 使用之前测试的结果,如果设置了,则使用 sigusr1,否则使用 sigusr2