Я пытаюсь передать стандартную версию программы в дочернем процессе на stdin в процессе родителей.Передача ребенка ребенку родителям stdin
В Баш это будет выглядеть так:
Wget "адрес" | менее
Мой код выглядит следующим образом:
int fd[2];
pid_t child_id;
int status;
char *args[] = {"wget","-O -",argv[1], NULL};
int pipe(int fd[2]);
child_id = fork();
if (child_id == -1)
{
printf ("Fork error\n");
}
if (child_id == 0)
{
close(fd[0]);
int c = dup2(fd[1],1);
execl ("/usr/bin/wget", "wget", "-qO-",argv[1], NULL);
}
else{
waitpid(child_id,&status,0);
close(fd[1]);
int c2 = dup2(fd[0],STDIN_FILENO);
printf("%i\n",c2); //debugging
execl ("/usr/bin/less", "less", NULL);
}
Пожалуйста, обратите внимание, что ARGV [1] должна быть webadress , Но при запуске программы отладочный вывод dup2 (int c2 = dup2(fd[0],STDIN_FILENO);
) в родительском элементе возвращает -1, поэтому он терпит неудачу.
Я не могу найти программу.
Не уверен, что это ответ, но не с помощью трубы-специальный файл помощи в этом случае? – unxnut
В качестве примечания, вы можете быть заинтересованы в 'popen()'. – FatalError
Я знаю, что есть способ без перенаправления stdin/out, но я хочу сделать это вот так: – arnoapp