多处理-C如何通过管道从echo启动多个命令
发布时间:2022-08-11 21:38:42 366
相关标签: # 数据
我为2个命令制作了多进程管道(echo "test" | wc
). 然而,当我尝试为n命令(echo "test" | wc | cat
|更多)我被困在环路内。
Echo始终是启动命令。
我认为我正确地关闭了未使用的描述符。
此外,我实际上是在从子进程执行回送,在父进程中接收数据并执行此操作while
还有其他所有命令。这也是一个好方法吗?还是我让事情变得更复杂了。
int main(int argc, char *argv[]) {
int status;
int filedes[2];
pid_t pid_enfant;
pipe(filedes);
char *wc[] = {"wc", NULL};
char *cat[] = {"cat", NULL};
char *echo[] = {"echo", NULL};
char **cmd[] = { echo, wc , cat, NULL};
int fd_in = 0;
while (*cmd != NULL) {
pipe(filedes);
if ((pid_enfant = fork()) == -1) {
exit(EXIT_FAILURE);
} else if (pid_enfant == 0) {
dup2(fd_in, 0); //change the input according to the old one
if (*(cmd + 1) != NULL)
dup2(filedes[1], 1);
close(filedes[0]);
if (strcmp((*cmd)[0], "echo") == 0) {
char argums[strlen("echo") + strlen("football") + strlen("2> /dev/null") + 5]
strcpy(argums, "echo \"football\" 2> /dev/null")
char *tab[] = {"/bin/bash", "-c", argums, NULL};
execv("/bin/bash", tab);
return 1;
} else {
execvp((*cmd)[0], *cmd);
exit(1);
}
} else {
wait(NULL);
close(filedes[1]);
fd_in = filedes[0]; //save the input for the next command
(*cmd)++;
}
}
}
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报