gpt4 book ai didi

使用 printf 检查过程控制

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

考虑以下 C 代码:

int main(){
pid_t pid;
int status, counter = 4;

while(counter > 0){
pid = fork();

if (pid){
counter/=2;
}

else{
printf("%d", counter);
break;
}
}
if (pid){
waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);

waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);

printf("%d", counter);
}
return counter;
}

所有进程都运行完成,并且 printf 是原子的,并且在打印其参数之后但在返回之前调用 fflush(stdout)。

列出可以通过调用 printf 发出的各个数字。

正确答案是 1 2 3 4 5 6。

但是,我不明白为什么。首先,WEXITSTATUS 可能的输出是什么?如果所有进程都运行完成,那不是总是等于0吗?另外,为什么不可能输出0?如果counter == 0和WEXITSTATUS都输出0,那么counter最终会是0吗?

最佳答案

我几乎可以肯定,最后一个打印语句的结果是不确定的,但本质上你永远不会得到零,因为计数器永远不会为零,因为子级永远不会返回零。如果计数器为零,那么它一开始就不会 fork 。

关于使用 printf 检查过程控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27411908/

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