gpt4 book ai didi

c - N命令管道 "Inter-process "

转载 作者:行者123 更新时间:2023-11-30 17:53:02 25 4
gpt4 key购买 nike

我已成功使用一个管道传输一个命令的输出。

我想用 N 个连续的命令来完成此操作,其中每个命令代表一个进程。

这是我对一个命令进行管道化的尝试,那么要制作 N 个命令序列,我需要 n-1 个管道吗?以及所有进程的父进程如何收集输出并打印它。

谢谢你。

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>

int main(int argc ,char *argv[])
{
int i,pid;
int fd[2];//crea i descriptor
char phrase[30][30];//crea il buffer
pipe(fd); /* crea la pipe */

for(i=0;i<argc;i++)
{
if((pid=fork())==0)
{
strcpy(phrase[i], argv[i+1]);
printf("ho scritoo :'%s'\n",phrase);
close(fd[0]); /* chiude in lettura */
write(fd[1],phrase[i],strlen(phrase[i])+1); /* invia anche 0x00 */
close (fd[1]); // chiude in scrittura
// pid=0 -> figlio
usleep(50000*(1+i)); // Ritardo iniziale
printf("Figlio: %d\n",i+1); // Stampa messaggio del figlio
usleep(500000*(1+i)); // Ritardo finale
return(101+i); // Termina con codice di ritorno
} else {
printf("Ho generato il figlio %d con pid %d\n",i+1,pid);
char message[100]; //creare il buffer
memset(message,0,100);
int bytesread;

bytesread = read(fd[0],message,sizeof(message));
printf("ho letto dalla pipe %d bytes: '%s' \n",bytesread,message);
// close(fd[0]);
}
}
close(fd[0]); /* chiude in scrittura */
close(fd[1]); /* chiude in scrittura */
// Attende che dieci processi terminino
for(i=0;i<argc-1;i++)
{
int status;
wait(&status); // Attende termine di un figlio (uno qualunque)
printf("Terminato processo %d\n",WEXITSTATUS(status));
}
return 0;
}

最佳答案

是的,您将拥有用于 N 个进程的 N-1 个管道。您可以将所有进程打印到标准输出。由于每个子进程都将继承父进程的标准输出,因此它们都将打印到父进程的标准输出设置的内容。如果您通过将 stdout 重定向到文件来启动链,那么它们都会打印到该文件。问题将同步他们的写入,以便他们不会在另一个写入的中间进行写入。

如果您想将所有子级输出通过管道传输回原始父级,您可以让每个子级将其从其子级管道读取的所有内容写入其父级管道。每个 child 都以这种方式将其传递到链上。

关于c - N命令管道 "Inter-process ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861924/

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