gpt4 book ai didi

c - sigprocmask 之后 sigset_t 的值

转载 作者:行者123 更新时间:2023-11-30 16:09:49 24 4
gpt4 key购买 nike

来自man sigprocmask:

"If oset is not null, it is set to the previous value of the signal mask."

我的问题:无需运行或调试程序,

  1. 执行第 10 行后,旧信号掩码的值被存储到 y 中。由于在执行该行之前没有阻塞信号,那么y的值是多少?

  2. 有没有办法在执行第14行后确定z的值?

1 void my_sig_handler(int sig){
2 write(1, "a", 1);
3 }
4 int main(){
5 signal(SIGINT, my_sig_handler);
6 sigset_t x, y, z;
7 sigemptyset(&x);
8 sigaddset(&x, SIGINT);
9
10 sigprocmask(SIG_BLOCK, &x, &y);
11 write(1,"1",1);
12 do_some_work();
13 write(1,"2",1);
14 sigprocmask(SIG_SETMASK, &y, &z);
15
16 exit(0);
17 }

最佳答案

您可以使用sigismember测试信号集中的成员资格。历史上 POSIX 省略了一种方法来识别可能是您需要测试的信号编号的值范围,但所有历史系统都定义了 _NSIGNSIG 来告诉您这一点, future 的 POSIX 正在添加它。

请注意,通常不能假设第 10 行后 y 为空,因为信号掩码是在 fork/exec 之间继承的。您的程序可能已在某些信号被屏蔽的情况下启动。

关于c - sigprocmask 之后 sigset_t 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59013574/

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