C forkN的功能是什么?

C forkN的功能是什么?,c,operating-system,fork,semaphore,multitasking,C,Operating System,Fork,Semaphore,Multitasking,第一次使用C代码时,我就被它击中了。有人熟悉“福克斯”吗?我读过关于fork的书,但是我找不到任何关于N的参考。。。要将其放到上下文中,我必须确定以下代码中运行了多少个进程 int main(int argc, char* argv[]) { forkN(6); } void forkN(int count) { if(count > 0) { fork(); forkN(count-1); } } 任何帮助都将不胜感激 关于fork,您必须记住它返回两次,

第一次使用C代码时,我就被它击中了。有人熟悉“福克斯”吗?我读过关于fork的书,但是我找不到任何关于N的参考。。。要将其放到上下文中,我必须确定以下代码中运行了多少个进程

int main(int argc, char* argv[]) {
  forkN(6);
}

void forkN(int count) {
  if(count > 0) {
    fork();
    forkN(count-1);
  }
}

任何帮助都将不胜感激

关于fork,您必须记住它返回两次,因此使用
3
我将向您展示分析

 int main(int argc, char* argv[]){
    forkN(6)
 }

 void forkN ( int count ) {
    if(count > 0) {
            fork();
            //returns twice, once for the parent process, once for the child. 
            forkN(count-1);
            //Both processes call forkN
    } 
 }

--main process -- forkN(3) -- if(3 > 0)-- fork() --- forkN(2) -- if(2>0) -- fork().. forkN(1)... 
                                            |Child                            |
                                            -------- forkN(2) -- if(2>0) -----|-fork()..
                                                                              |   |
                                                                              |   -------forkN(1)..
                                                                              |----- forkN(1)..
enter code here

正如你所看到的,事情变得复杂了。要知道的是,每次调用
fork()
,都会有两个进程调用
forkN()
,这两个进程中的每一个都会创建自己的子进程。

关于fork,您必须记住的是它返回两次,因此使用
3
我将向您展示分析

 int main(int argc, char* argv[]){
    forkN(6)
 }

 void forkN ( int count ) {
    if(count > 0) {
            fork();
            //returns twice, once for the parent process, once for the child. 
            forkN(count-1);
            //Both processes call forkN
    } 
 }

--main process -- forkN(3) -- if(3 > 0)-- fork() --- forkN(2) -- if(2>0) -- fork().. forkN(1)... 
                                            |Child                            |
                                            -------- forkN(2) -- if(2>0) -----|-fork()..
                                                                              |   |
                                                                              |   -------forkN(1)..
                                                                              |----- forkN(1)..
enter code here

正如你所看到的,事情变得复杂了。需要知道的是,每次调用
fork()
,都会有两个进程调用
forkN()
,这两个进程中的每一个都会创建自己的子进程。

在示例源代码中定义了
forkN()
函数,这非常明显,“N”是否会让您感到困惑?答案是“forkN”只是一个本地定义函数的名称,也可以很容易地命名为“repeated\u do()”或“countdown\u lots\u of\u times()”。至于识别有多少进程正在运行,如您所见,名为“forkN()”(或“repeated\u do()”或“countdown\u lots\u of\u times()”)的函数是递归调用
fork()
。绘制流程创建并对其进行计数应该相当简单。

在示例源代码中定义了
forkN()
函数,非常明显,“N”可能会让您感到困惑吗?答案是“forkN”只是一个本地定义函数的名称,也可以很容易地命名为“repeated\u do()”或“countdown\u lots\u of\u times()”。至于识别有多少进程正在运行,如您所见,名为“forkN()”(或“repeated\u do()”或“countdown\u lots\u of\u times()”)的函数是递归调用
fork()
。绘制流程创建并对其进行计数应该非常简单(或者可以按指数计算)。

这是他们在这里定义的函数。你不明白什么?这确实是一个坏例子。忘了它,拿下一个。三个月后再来讨论这个问题。出于好奇:您的C类真的是从这个开始的吗?顺便说一句:
int main()
应该返回一个
int
!谢谢你的评论。我实际上是在一个操作系统类中,它应该有一个对C语言的一些知识的pre-req,这是他们在这里定义的函数。你不明白什么?这确实是一个坏例子。忘了它,拿下一个。三个月后再来讨论这个问题。出于好奇:您的C类真的是从这个开始的吗?顺便说一句:
int main()
应该返回一个
int
!谢谢你的评论。我实际上是在一个操作系统类,应该有一个预先要求的一些知识在C。谢谢你为我打破这一点。现在更有意义了!谢谢你帮我把这个分解。现在更有意义了!