我正在编写一个程序,我想以编程方式将命令重定向到另一个进程。因此,如果我接收命令作为参数,我希望接收父进程的输出。
我的代码是:#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
int main(int argc, char* argv[]) {
{
char msg[8]=“message”;
int pp[2];
if(pipe(pp)<0) {
printf("Error pipe");
exit(1);
}
if (!fork())
{
close(fd[0]);
//TODO...
} else {
close(fd[1]);
read(fd[0], msg, 8);
close(fd[0]);
}
}
我忘记了子部分,在这里我执行命令并进行重定向。我使用管道在子进程和父进程之间进行通信。
在子端,我已经关闭了未使用的管道端,然后我不知道如何继续。
你能帮忙吗?
步骤如下:
- 关闭管道读取和标准输出
- dup()管道写重定向管道写到标准输出,fd=1
- 关闭初始管道写入 执行命令,从argv中读取第一个参数
你的代码变成这样:
if (!fork())
{
close(pp[0]);
close(1);
dup(pp[1]);
close(pp[1]);
execlp(argv[1], argv[1],(char *)0);
exit(0)
}