gpt4 book ai didi

c - 如何在 sigaction.sa_flags 中设置多个标志

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:40 25 4
gpt4 key购买 nike

我有以下结构:

struct sigaction sa1;
sa1.sa_flags=SA_SIGINFO;
sa1.sa_flags=SA_NODEFER;
sa1.sa_sigaction = handler;
sigaction(SIGUSR1,&sa1,NULL);

我如何将 SA_SIGINFO 与 SA_NODEFER 一起使用而不使第二个标志覆盖第一个标志?

最佳答案

The manual page有答案:

It is formed by the bitwise OR of zero or more of the following: [...]

所以你会做类似的事情

sa1.sa_flags = SA_NODEFER | SA_SIGINFO;

这种将多个独立标志表示为整数中的单个位的方式在所有编程中都非常常见,在 C 中当然也是如此。由于按位操作在 C 中很简单,因此很容易获得它,并且由于它是一个非常轻量级的实现,因此通常是可取的.

更“现代”(冗长,和/或 Bloaty McBloatface)的方法可能是在结构中使用位域:

struct sigaction {
/* ... */
struct {
unsigned int sa_nocldstop : 1;
unsigned int sa_nocldwait : 1;
unsigned int sa_nodefer : 1;
unsigned int sa_nostack : 1;
unsigned int sa_siginfo : 1;
/* ... */
} sa_flags;
/* ... */
};

这使得struct sigaction中的sa_flags成员本身就是一个struct,它由一堆1位宽的组成unsigned int 成员。这通常会编译成完全相同的按位代码,但它更清晰。

您可以通过显式设置来设置多个标志:

sa1.sa_flags.sa_nodefer = 1;
sa1.sa_flags.sa_siginfo = 1;

并且您需要一些其他方法来确保其余部分设置为 0。

关于c - 如何在 sigaction.sa_flags 中设置多个标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com