“〜[]”有什么作用?

时间:2017-11-15 06:51:24

标签: c arrays linux

我看到了以下代码行here

puts("sigprocmask(SIG_UNBLOCK, ~[], []) = 0");

我不明白,空数组脚本([])做了什么?

此外,C中~[]的目的是什么?

4 个答案:

答案 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]代表只有HUPINTQUIT位设置为1的掩码。~[HUP]代表掩码,所有位都设置为1,但{ {1}}位。

HUP代表一个奇怪的参数值~[],这对我来说没有意义(因为new_set - 1是一个指针)。我认为它会以某种方式导致包含所有元素的集合(所有位都设置为1)。

答案 2 :(得分:1)

reference说:

  

另一方面,位设置 也使用方括号显示但是   set元素仅由空格分隔。这是shell   准备执行外部命令:

sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0
     

这里第二个参数是两个信号的位组,SIGCHLD和   SIGTTOU。在某些情况下,位集是如此之大,以至于打印出来   未设置元素更有价值。在这种情况下,位集是前缀的   像这样的代字:

sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0
     

这里第二个参数代表所有信号的完整集合。

答案 3 :(得分:0)

语法〜[]是Javascript按位非空数组表达式的一部分。 C没有任何此类操作员。