gpt4 book ai didi

C 使用 exec 和 pipe 创建许多子进程

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:09 28 4
gpt4 key购买 nike

<分区>

我想创建与用户在参数中发送的一样多的子进程。我成功了。但是,我必须使用 exec 函数创建子进程,我不知道该怎么做。 Childs 进程将作为单独的程序创建并运行通过执行。此外,我希望每个子进程都使用 pipe 与主进程(父进程)通信。我不知道怎么做。到目前为止,我设法写了这样的东西:

    #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>


int main(int argc, char **argv)
{
pid_t pid;

if(argc < 3)
{
printf("Not enought arguments");
exit(0);
}

int number = atoi(argv[2]); // number of childern
pid_t pids[number],pid_s;
int i,n=number,status;
int pipes[number*2];
char buff[512];

if(strcmp("-p", argv[1]) == 0)
{
//
}

if(strcmp("-f", argv[1]) == 0)
{
//
}


switch (pid = fork()) {
case -1:
perror("Error in fork");
exit(0);

break;
case 0:

for(i=0; i < n; i++)
{
if((pids[i] = fork()) < 0)
{
perror("error fork");
}
else if(pids[i] == 0)
{
close(pipes[0]);
char *reply = "message";
write(pipes[1], reply, strlen(reply)+1);
execvp(argv[0],NULL);
}
}

while(n > 0)
{
pid_s = wait(&status);
--n;
}
break;
default:

close(pipes[1]);
read(pipes[0],buff,80);
printf("Message: %s", buff);

if(wait(0) == -1)
{

}

break;
}

return 0;
}

我更正了代码, child 通过 exec 创建了一个新进程。我想 child 通过管道与主进程通信。最好循环执行吗?

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com