作业帮 > 综合 > 作业

求解释一小段C语言代码的意思.

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/29 13:30:46
求解释一小段C语言代码的意思.
#include#include#include#include/* This variable is a "global" variable that can be accessed by both a parent process and all of its child processes */int value = 0;/* Here is our "main" function,which is the entry point for the application in the C programming language:*/int main(int argc,const char * argv[]){ pid_t pid; // Here,we call the fork() function:what does this do?pid = fork(); if (pid == 0) /* child process */ { value = value + 1; printf ("CHILD:value = %d\n",value); /* LINE C */ } else if (pid > 0) /* parent process */ { wait(NULL); printf ("PARENT:value = %d\n",value); /* LINE P */ }}结果CHILD:1PARENT:0程序运行在linux环境下.求支援这段代码是干嘛的,是和进程线程有关.
求解释一小段C语言代码的意思.
这段代码主要是验证Unix\linux环境下通过fork()函数创建进程时,父子进程中的fork()函数会返回不同的值.
在程序执行完"pid = fork();"代码后,系统启动一个当前进程的“克隆进程”作为当前进程的子进程,
可以认为子进程与父进程一样,都“恰好”执行到fork代码行.
接下来父子进程的代码逻辑分叉,因为fork函数会在子进程中返回0值,而在父进程中返回子进程的pid值.
这也就是上述代码中,fork之后的两个if语句的意义:当pid==0时,说明当前代码属于子进程;而当pid>0时,说明当前代码属于父进程.
再问: 问题是解释一下为什么CHILD的值为1,PARENT的值为0?谢谢!!!!
再答: 如果你能看懂“fork函数在父子进程中返回值不同”的部分, 那么在fork之前,value值为0,这在父子进程中是一样的。 但是fork之后, 由于fork在父进程中返回非零值(子进程的pid),所以代码走到了if(pid > 0)中,也就是value不变,并打印出PARENT:0。 而在子进程中,fork返回0值,所以代码走到了if(pid==0)中,value自增1,并打印。