Я работаю над программой оболочки для c и попытался выяснить, почему она продолжала выходить из цикла после запроса ответа пользователя.Он правильно запускает команду, но по какой-то причине вылетает.Я не мог понять, почему, и я думаю, что это как-то связано с тем, как я делаю конвейеры.
Это то, что у меня есть для примера, он должен выполнить команду piped и спроситьпользователь должен продолжать выполнять команду снова и снова, пока пользователь не введет что-либо, кроме «да».Может ли это быть execvp, что вызывает перерыв?Как я мог получить его, чтобы он продолжал цикл?Редактировать с обновлением разветвления.
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <fcntl.h>
int main()
{
char str[3];
do{
char* leftSide[] = {"ls", NULL};
char* rightSide[] = {"wc", NULL};
pid_t id, id2;
int pipe_fd[2];
pipe(pipe_fd);
id = fork();
if(id == 0){
dup2(pipe_fd[0],0);
close(pipe_fd[1]);
close(pipe_fd[0]);
if(execvp(rightSide[0], rightSide) == -1){
perror("error running pipe right command");
}
}
else{
id2 = fork();
if(id2 == 0){
dup2(pipe_fd[1],1);
close(pipe_fd[1]);
close(pipe_fd[0]);
if(execvp(leftSide[0],leftSide) == -1){
perror("error running pipe left command");
}
}
else{
wait(NULL);
wait(NULL);
}
}
printf("Continue?");
fgets(str, 3, stdin);
str[3] = '\0';
}while(strcmp(str, "yes") == 0);
return 0;
}