#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char *argv[])
{
pid child1, child2;
enter code here
child1 = fork();
errno = 0;
if (child1 < 0)
{
printf("Error! Forking can't be done\n");
}
else if (child1 == 0)
{
printf("Child one process activated! %d\n", getpid());
execv("Prcs_P1.c", NULL);
}
else
{
printf("Parent1 process activated! %d\n", getpid());
}
child2 = fork();
if (child2 < 0)
{
printf("Error! Forking can't be done\n");
}
else if (child2 == 0)
{
printf("Child two process activated! %d\n", getpid());
execv("Prcs_P2.c",NULL);
}
else
{
printf("Parent2 process activated! %d\n", getpid());
}
return 0;
}
输出是 Parent1进程已激活! 2614 Parent2进程已激活! 2614 孩子一个过程激活! 2615 Parent2进程已激活! 2615 孩子两个过程激活! 2617 孩子两个过程激活! 2616
答案 0 :(得分:2)
您不应将“.c”文件作为输入传递。它不可执行。您必须将可执行文件作为输入传递。类似于“xxxxxx.out”。
答案 1 :(得分:2)
正如Pavan在另一个答案中指出的那样,您传递的是一个不可执行的文件作为execv
的参数。你的意图是执行C程序,你不应该提供从该C程序编译的二进制文件吗?编译您希望子进程执行的C程序,适当地命名它们并输入execv
你应该抓住execv
的返回值来查找它发生了什么。在您的情况下,它将返回错误 - &#34;执行格式错误&#34;。
if( execv("Prcs_P2.c",NULL) < 1)
printf("execv failed with error %d\n",errno);