[英]I'm confused about why pid isn't printed as expected in fork()
我目前正在學習系統編程課程,我對 fork() 的工作原理有點困惑。
void fork0()
{
int pid;
if (pid = fork() == 0) {
printf("c : %d\n", pid);
printf("Hello from child\n");
exit(0);
}
else {
printf("p : %d\n", pid);
printf("Hello from parent\n");
wait(NULL);
}
}
在這個簡單的代碼片段中,我得到以下 output:
p : 0
c : 1
Hello from child
Hello from parent
我認為fork()
將 0 返回給子進程,將子進程的 PID 返回給父進程。 但是為什么子進程中的printf()
會打印 'pid' 1? 為什么父進程中的printf()
打印 'pid' 0? 我將不勝感激任何幫助..謝謝!
在 C 中, ==
運算符的優先級高於=
運算符。
因此, pid = fork() == 0
會將fork() == 0
() == 0 的比較結果賦值給pid
。
在父進程中, fork()
的返回值不會為零,因此要分配的比較結果將為0
。
添加括號,如(pid = fork()) == 0
,首先將fork()
的返回值賦給pid
,然后將該值與零進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.