gpt4 book ai didi

c - sigaction 和 sigset_t 在 Solaris 和 Linux 之间的可移植性

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

我在 Solaris 平台上有一些遗留代码,我想将其移植到 Linux,但我在 Linux 上遇到一些编译错误。在 Solaris 上,我有以下代码片段:

#include <signal.h>
...
void f() {
struct sigaction a;
sigaction(sig,0,&a);
std::cout << (void *) a.sa_handler
<< ", " << (void *) a.sa_sigaction
<< ", " << a.sa_mask.__sigbits[0]
<< ", " << a.sa_mask.__sigbits[1]
<< ", " << a.sa_mask.__sigbits[2]
<< ", " << a.sa_mask.__sigbits[3]
<< ", " << (void *) a.sa_flags
<< std::endl;
}

当我尝试使用 gcc 4.9.2 在 Linux 上编译时(在 Solaris 上编译正常),我收到以下编译错误:

error: struct __sigset_t has no member named __sigbits
<< ", " << a.sa_mask.__sigbits[0]

... __sigbits[1]__sigbits[2]__sigbits[3] 也是如此。

Linux 中是否有任何等效项?

最佳答案

执行此操作的 POSIX 兼容方法是使用 sigismember 函数。

int i;
for (i=0; i<32; i++) {
printf("signal %d masked: %s\n", i, sigismember(&a.sa_mask, i) ? "yes", "no");
}

关于c - sigaction 和 sigset_t 在 Solaris 和 Linux 之间的可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43345802/

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