gpt4 book ai didi

隐式执行的 C fork 系统调用

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:38 25 4
gpt4 key购买 nike

我对 C 分支函数的一个方面感到困惑。

如果我这样做:

int pid;

if ( pid = !fork()) {
//some code
} else {
printf("%d\n","Waiting for child");
wait(&pid);
}
return 0;

Fork 将以某种方式隐式执行,但我无法理解。正如我所见,像这样的东西是 C 中的常见习语:

int fn;

while ( fn = someFunction()) {
//doSomething
}

最后一个例子与 fork 无关,但它有我不理解的隐含部分( condition )。

谢谢。

最佳答案

在C语言中,赋值的结果是一个表达式,其值等于赋值完成后变量持有的值。在条件测试中,任何零值都将被视为“假”,否则条件将评估为“真”。

在您的两个示例中,赋值的结果都用作条件语句的测试。某些 C 编译器在看到此构造时会发出警告,因为在本应使用 ==(相等)时意外键入 =(assginment)是一个常见错误。通常通过告诉编译器您确实打算使用赋值作为带有一组额外括号的测试值来抑制警告:

while ( (fn = someFunction()) ) {
//doSomething
}

请注意,您的 fork() 可以正常工作,因为 wait(0) 将等待与父进程处于同一进程组中的任何子进程。但是,变量 pid 并不真正包含进程标识符。它保存逻辑不应用于 fork() 调用结果的结果。

关于隐式执行的 C fork 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18726885/

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