簡體   English   中英

我很困惑為什么 pid 沒有按預期在 fork() 中打印

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM