Я пишу оболочку, которая разветвляется, родительский элемент читает входные данные, а дочерний процесс обрабатывает и выполняет его с помощью execvp.
псевдокод основного метода:
do{
pid = fork();
print pid;
if (p<0) { error; exit; }
if (p>0) { wait for child to finish; read input; }
else { call function to parse input; exit; }
}while condition
return;
происходит то, что я никогда не вхожу в дочерний процесс (напечатанный pid всегда положительный, я никогда не вхожу в остальное). однако, если я не вызываю функцию синтаксического анализа и у меня просто есть выход, я правильно поочередно вводю parent и child.
full code:
int main(int argc, char *argv[]){
char input[500];
pid_t p;
int firstrun = 1;
do{
p = fork();
printf("PID: %d", p);
if (p < 0) {printf("Error forking"); exit(-1);}
if (p > 0){
wait(NULL);
firstrun = 0;
printf("\n> ");
bzero(input, 500);
fflush(stdout);
read(0, input, 499);
input[strlen(input)-1] = '\0';
}
else exit(0);
else { if (parse(input) != 0 && firstrun != 1) { printf("Error parsing"); exit(-1); } exit(0); }
}while(strcmp(input, "exit") != 0);
return 0;
}
EDIT:
- что еще выход (0) просто что-то, что я забыл там от игры вокруг
- добавление новой строки к принтам показывает, что на самом деле она работает правильно и вводит дочерний процесс; спасибо, проблема вроде в разборе