一个小C程序的结果

Ikk*_*kke 4 c unix fork

我们需要告诉以下C程序的结果:

main()
{
    int pid, k, som;
    som = 0; k = 2;
    pid = fork();
    if(pid == 0)
        k=5;
    else
        wait(0);
    for(int i = 1; i <= k; i++)
        som += i;
    printf("%d", som);
}
Run Code Online (Sandbox Code Playgroud)

我的第一个期望是3.当进行fork调用时,将复制进程的内存,并且两个程序都会运行.然后子进程执行,但k仍然等于2.所以最后,它执行1 + 2 = 3;

但是当这个程序执行时,它输出153.我没有得到最接近的线索,为什么输出它.

有谁能说出原因?

Jar*_*Par 15

原因是您有2个进程打印到同一个控制台."fork"是一个unix/linux命令,调用一次并返回两次.其中一个返回将在原始进程中调用fork并返回生成的子进程的PID.第二个返回值为0,这表示它是子进程.

其中一个程序,我相信的孩子,首先执行并计算15作为值并最后打印到控制台.由于wait(0),父程序执行第二个并产生值3.

  • 我相信你是对的.您可以通过将程序的最后一行更改为:printf("%d \n",som)来快速辨别是否这样; (2认同)