Почему execlp () не выводит данные на терминал?

Я пытаюсь связать выход дочернего процесса с входом родительского процесса; родительский процесс должен выполнить системный вызов или команду, используя выходные данные дочернего процесса.

Я посмотрел на следующие темы для ответа; однако я не совсем получил ответ, который искал.

Труба — проблема трубопровода C ++

Linux Pipes как вход и выход

У меня проблема в том, что команда в родительском процессе не печатается на терминал.

Почему вывод не выводится на терминал? Я закрыл концы моей трубы в родительском и дочернем процессах. Кроме того, родительский std_out не изменяется.

Вот мой код

#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
enum {RD, WR};
int fd[2];
pid_t pid;

if (pipe(fd) < 0)
perror("pipe error");
else if ((pid = fork()) < 0)
perror("fork error");
else if (pid == 0) { //In child process
close(fd[RD]);
dup2(fd[WR], STDOUT_FILENO);
close(fd[WR]);
execlp("/bin/ps", "ps", "-A", NULL);
}
else { //In parent process
close(fd[WR]);
dup2(fd[RD], STDIN_FILENO);
close(fd[RD]);
wait(NULL);
execlp("/bin/wc", "wc", "-l", NULL);
}
return 0;
}

-1

Решение

Вы не проверяете провал execlp,

Вы уверены, что все ваши программы находятся там, где вы думаете? Ваша программа работает для меня, если я просто поменяю "/bin/wc" в "/usr/bin/wc",

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]