C 两个条件如何在if-if-else语句中工作?
我的教授用C语言展示了以下示例:C 两个条件如何在if-if-else语句中工作?,c,if-statement,C,If Statement,我的教授用C语言展示了以下示例: #include <sys/types.h> #include <stdio.h> #include <unistd.h> int main() { pid_t pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Fail
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
/* fork another process */
pid = fork();
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
return 1;
}
else if (pid == 0) { /* child process */
execlp("/bin/ls", "ls", NULL);
}
else { /* parent process */
/* parent will wait for the child */
wait (NULL);
printf("Child Completed its execution\n");
}
return 0;
}
#包括
#包括
#包括
int main(){
pid_t pid;
/*叉另一个过程*/
pid=fork();
如果(pid<0){/*发生错误*/
fprintf(标准“Fork Failed”);
返回1;
}
如果(pid==0){/*子进程*/
execlp(“/bin/ls”,“ls”,NULL);
}
else{/*父进程*/
/*家长将等待孩子*/
等待(空);
printf(“子项已完成其执行\n”);
}
返回0;
}
我编译并运行了它。我在这段代码中看到了一个奇怪的行为:
“ls”程序/命令的结果在else if条件下打印,但字符串“Child Completed it execution\n”也在else中打印
这不是一种奇怪的行为吗?不,是你干的。有两个进程正在运行。一个报告了ls,另一个报告了printf()
具体来说,子/分叉进程执行/bin/ls,父进程名为printf(),即您看到的输出 这是因为
fork
创建一个子进程,该子进程从代码中的同一点继续执行,但pid
设置为0。您看到的是父进程正在执行printf
行,而子进程正在执行ls
命令。您的意思是子进程检查else if的条件,并且在子进程一侧它是真的吗。父级也会检查相同的条件,但在其一侧为false,然后会陷入“else”?所以我有两个进程使用if语句和指令?是的,每个进程(父进程)和fork都在执行相同的代码。子进程(调用fork()时创建的子进程)的pid为零,因此该条件为真。父级的pid为XXXX(>0),因此满足最后一个条件。我在返回0之前放置了一个printf语句,但它执行了一次。分叉何时在我的代码中终止?execlp是否终止了子进程?我不知道-如果您放置了一个final printf(),它应该由子进程和父进程执行…execlp
将进程的代码替换为另一个可执行文件(在本例中为ls
),并且永远不会返回,因此,孩子永远不会看到printf
。当你看到一个你不知道的函数时,一定要查看手册!那里没有黑魔法。看一眼那边,你就会明白:)