gpt4 book ai didi

c - 我如何知道 sig_atomic_t 的值是否已更改?

转载 作者:行者123 更新时间:2023-11-30 15:56:59 25 4
gpt4 key购买 nike

因为我需要在 SIGCHLD 到达时更新作业状态,所以我如何知道 sig_atomic_t 的值是否已更改?代码看起来像这样...

sig_atomic_t child_status;
sig_atomic_t child_pid; //is this ok?
void sigHandler(int signum){
pid_t pid;
int status;
while((pid = wait(-1, &status, WNOHANG) > 0){
child_status = status;
child_pid = (int)pid;
}
}

最佳答案

您不知道 sig_atomic_t 有多大,因此您不一定可以在其中存储 pid 或状态。也就是说,C 标准简单地说:

§7.14 Signal handling

...

The type defined is

sig_atomic_t

which is the (possibly volatile-qualified) integer type of an object that can be accessed as an atomic entity, even in the presence of asynchronous interrupts.

POSIX 不保证任何额外的东西,AFAICS。话虽如此,在 n 位机器上,sig_atomic_t 很有可能是 n 位类型(但具有半宽总线的芯片,如 8088,可能会受到更多限制)。

通过将变量中的当前值与您认为上次的值进行比较,您可以判断它是否以与任何其他变量相同的方式更改:

int old_status = child_status;
int old_pid = child_pid;

...busy code...

if (child_status != old_status || child_pid != old_pid)
...something changed...

关于c - 我如何知道 sig_atomic_t 的值是否已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792670/

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