Итак, у меня есть программа удаленной оболочки.Он работает хорошо, когда вывод не так велик, но когда я получаю большой вывод из команды, он зависает.
Вот фрагмент кода.Я могу подтвердить работу args, как и ожидалось.Так, например, если args [0] = "ps" и args = ["ps", "-ael", NULL].Родитель застрянет в ожидании ().Ребенок застревает на execvp ().Однако, если args - это просто ["ps", "-a", NULL], где меньше выходных данных, он не застревает в wait ().
Я должен отметить, что это то, что он дитмакинтошВ системе Linux происходит сбой и говорит free (): неверный следующий размер (нормальный).
...
if (fork() == 0) {
printf("fork %s\n", " ");
close(STDOUT_FILENO);
close(fds[0]);
dup2(fds[1], STDOUT_FILENO);
dup2(fds[0], STDIN_FILENO);
dup2(errorPipe[1], STDERR_FILENO);
close(fds[1]);
fflush(stdout);
if(0 < execvp(args[0], args)) {
perror("execvp failed");
printf("Command Failed! \n");
}
}
printf("%s\n", "waiting");
wait(0);
printf("%s\n", "done waiting");
char errorMessage[3000];
read(fds[0], msg, command->messageSize);
printf("msg %s\n", msg);
....