Перенаправить в execlp()
У меня проблема с 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
в секунду
1 ответ
Вы, вероятно, хотели использовать dup2 для перенаправления stdin и stdout. Также вы не используете execlp правильно. Ожидается переменное число параметров, оканчивающееся указателем NULL. И, как следует из комментариев, команда ожидания не должна быть там.
#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);
}
}