为什么 execlp() 不将输出打印到终端?
Why isn't execlp() printing output to the terminal?
我正在尝试 link child 进程的输出到 parent 进程的输入; parent 进程是使用 child 的输出执行系统调用或命令。
我已在以下主题中寻找答案;然而,我并没有完全得到我正在寻找的答案。
Linux Pipes as Input and Output
我遇到的问题是 parent 进程中的命令没有打印到终端。
为什么输出没有打印到终端?我已经关闭了 parent 和 child 进程中的管道末端。此外,parent 的 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;
}
您没有检查 execlp
的失败。
您确定所有程序都在您认为的位置吗?如果我只是将 "/bin/wc"
更改为 "/usr/bin/wc"
.
,您的程序对我有用
我正在尝试 link child 进程的输出到 parent 进程的输入; parent 进程是使用 child 的输出执行系统调用或命令。
我已在以下主题中寻找答案;然而,我并没有完全得到我正在寻找的答案。
Linux Pipes as Input and Output
我遇到的问题是 parent 进程中的命令没有打印到终端。
为什么输出没有打印到终端?我已经关闭了 parent 和 child 进程中的管道末端。此外,parent 的 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;
}
您没有检查 execlp
的失败。
您确定所有程序都在您认为的位置吗?如果我只是将 "/bin/wc"
更改为 "/usr/bin/wc"
.