简单的一块C我无法理解

时间:2011-01-24 22:17:25

标签: c fork

对不起,似乎无法理解这一小块C中发生的事情:

    #include <stdio.h>

    main()
    {
        int i;
        if (fork()) { /* must be the parent */
            for (i=0; i<1000; i++)
            printf("\t\t\tParent %d\n", i);
        }
        else { /* must be the child */
            for (i=0; i<1000; i++)
                printf("Child %d\n", i);
        }
    }

据我所知,它将打印1000次儿童和父母1000次,但显然它要复杂得多,我必须完全理解它!请有人能够向我解释一下吗?另外,我如何更改程序,使父和子执行不同的计算?

非常感谢你对此的帮助:)

3 个答案:

答案 0 :(得分:4)

fork()创建一个新进程。所以从那时起,将会有两个独立的进程,它们都是从fork()所在的代码点继续进行的。在主进程中,fork()返回新子进程的PID,并在子进程中返回零。因此代码将在不同的进程中执行if语句的不同分支。

还请记住,新进程与线程不同。这些过程不会有任何全局变量或类似的共同点,但它们是完全分开的。但他们不一样。

答案 1 :(得分:1)

fork()函数生成一个新进程,其中包含原始“父”进程的内存的精确副本。两个进程都从同一点继续执行,但fork()为子进程返回0,对于父进程返回非零。所以父进程执行第一个循环,子进程执行第二个循环。

请注意,由于没有任何内容同步父级和子级,因此您在屏幕上显示的字符串顺序基本上是随机的。

答案 2 :(得分:1)

fork()函数生成所谓的子进程。子进程是首先调用fork()的进程的克隆。它甚至开始在父进程停止的同一个地方执行,这是在调用fork()之后。

唯一的区别是fork()将为父进程返回true(或为零),为子进程返回false(或非零)。这意味着父进程在调用fork()之后将执行条件的第一部分。子进程将开始执行条件的第二部分。

每个人都会按照操作系统的计划打印1000次,每次打印都会在主要方法结束时终止。