我对execlp有问题。当我不知道如何将命令从指针数组正确重定向到execlp时。例如我想使用
ls -l | sort -n
我的程序只接受“ ls”和“ sort”
int pfds[2];
pipe(pfds);
child_pid = fork();
if(child_pid==0)
{
close(1);
dup(pfds[1]);
close(pfds[0]);
execlp(*arg1, NULL);
}
else
{
wait(&child_status);
close(0);
dup(pfds[0]);
close(pfds[1]);
execlp(*arg2, NULL);
}
所有命令都在指针数组中,其中:
ls -l
在第一个表中,sort -n
在第二个表中 最佳答案
您可能想使用dup2来重定向stdin和stdout。另外,您没有正确使用execlp。它期望可变数量的参数以NULL指针终止。并且如注释所建议的,wait命令将不存在。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
int pfds[2];
pipe(pfds);
int child_pid;
child_pid = fork();
if(child_pid==0)
{
dup2(pfds[1], 1);
close(pfds[0]);
execlp("ls", "-al", NULL);
}
else
{
dup2(pfds[0], 0);
close(pfds[1]);
execlp("sort", "-n", NULL);
}
}
关于c - 重定向到execlp(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21002558/