答案 0 :(得分:3)
没有。
puts("sigprocmask(SIG_UNBLOCK, ~[], []) = 0");
^ ^
这是一个字符串文字。这一行可能用于生成另一种语言的程序,至少不是C语言。
答案 1 :(得分:3)
链接的程序似乎是用一些发明的半正式语言记录它的行为。这种记录“语言”不是C.你问题中的字符串文字只是发明的“语言”中的一行,程序将发送到标准输出。因此~[]
位与C有关,在C上下文中没有特殊含义。
在每个(假设成功的)k_sigprocmask
之后调用progrtam通过将这些字符串发送到输出来记录调用。
例如,当程序输出sigprocmask(SIG_SETMASK, [], NULL) = <something>
时,它基本上只是告诉用户“我刚用第一个参数k_sigprocmask
调用SIG_SETMASK
函数,空集位作为第二个参数和一个null指针作为第三个参数。我收到<something>
作为错误代码。“
[]
代表全位0位掩码(空集)。 [HUP INT QUIT]
代表只有HUP
,INT
和QUIT
位设置为1的掩码。~[HUP]
代表掩码,所有位都设置为1,但{ {1}}位。
HUP
代表一个奇怪的参数值~[]
,这对我来说没有意义(因为new_set - 1
是一个指针)。我认为它会以某种方式导致包含所有元素的集合(所有位都设置为1)。
答案 2 :(得分:1)
另一方面,位设置 也使用方括号显示但是 set元素仅由空格分隔。这是shell 准备执行外部命令:
sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0
这里第二个参数是两个信号的位组,SIGCHLD和 SIGTTOU。在某些情况下,位集是如此之大,以至于打印出来 未设置元素更有价值。在这种情况下,位集是前缀的 像这样的代字:
sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0
这里第二个参数代表所有信号的完整集合。
答案 3 :(得分:0)
语法〜[]是Javascript按位非空数组表达式的一部分。 C没有任何此类操作员。