В настоящее время я пытаюсь написать небольшую оболочку, которая поддерживает трубопровод.В моей функции execute(char** args, char** args2)
требуется два массива символов, где каждая команда разделяется разделителем " "
.Первый аргумент содержит команды перед конвейером (например, {ls, -l}
, а второй аргумент - команды после конвейера (например, {wc}
).
Однако в моей функции execute
второй дочерний процесс pid2
запускается первым, а первый дочерний элемент pid1
никогда не попадает.
Я не уверен, что мне не хватает чего-то важного для создания ваших собственных конвейерных команд в C
, и я действительно буду признателен за любую помощь / советЯ мог бы получить.
Выполнить функцию:
int execute(char** args, char** args2) {
int des_p[2];
pid_t pid1, pid2;
if(pipe(des_p) == -1) {
perror("Pipe failed");
exit(1);
}
pid1 = fork();
if(pid1 == 0) {
printf("AT FIRST CHILD");
dup2(des_p[1], STDOUT_FILENO);
close(des_p[0]);
execvp(args[0], args);
perror("execvp of of FIRST PROCESS failed");
exit(1);
}
pid2 = fork();
if(pid2 == 0) {
printf("AT SECOND CHILD \n");
dup2(des_p[0], STDIN_FILENO);
close(des_p[1]);
execvp(args2[0], args2);
perror("execvp of SECOND PROCESS failed");
exit(1);
}
close(des_p[0]);
close(des_p[1]);
wait(pid1);
wait(pid2);
return 0;
}