fork()作为参数

cod*_*key 4 c fork

通常当我需要在C中分叉时,我会这样做:

pid_t p = fork();
if(p == 0) { /* do child stuff */ }
else { /* do parent stuff and pray there wasn't an error */ }
Run Code Online (Sandbox Code Playgroud)

它发生在我身上,我可以抛弃额外的变量并使用:

if(fork() == 0) { /* child */ }
else { /* parent/pray */ }
Run Code Online (Sandbox Code Playgroud)

抛开不正确的错误处理,(为什么)这个工作/不工作?

Dio*_*lis 20

你的建议肯定会奏效.但是,在任何行为良好的应用程序中,错误处理都不是可选的.以下实现模式同样简洁并且还处理错误.此外,它将fork()返回值保存在pid变量中,以防您以后在父级中使用它,比如等待子级.

switch (pid = fork()) {
case -1:       /* Failure */
  /* ... */
case 0:        /* Child */
  /* ... */
default:       /* Parent */
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)