Это всего лишь небольшая часть большой программы, но я пытаюсь получить вывод от execvp. У меня правильно настроен execvp с dup2
, который направляет его в канал. Моя проблема возникает, когда дело доходит до использования read для чтения полной длины канала. Я не знаю, насколько велик вывод execvp
каждый раз, потому что он может отличаться в зависимости от ввода.
int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == 0) {
close(fd[0]);
dup2(fd[1], 1);
execvp(msg.v,(char *[]){msg.v,NULL});
} else if (pid > 0) {
close(fd[1]);
read(fd[0],msg.v,....);
}
Я пробовал несколько разных размеров для чтения, но этого либо недостаточно, либо в конце я получаю случайный мусор. Я знаю, что вы можете использовать popen и несколько других вещей из stdio, но это требуется для задания, что мы их не используем Im отказ от других способов получить результат.
Еще немного бесполезной информации, вся программа является частью сервера. Я создаю сервер и клиент. Запустите сервер, дайте клиенту команду терминала, он отправляет ее на сервер через поток INET и отправляет вывод обратно клиенту, чтобы отобразить вывод без stdio.