2013-11-27 7 views
0

Я пытаюсь передать стандартную версию программы в дочернем процессе на 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, поэтому он терпит неудачу.

Я не могу найти программу.

+0

Не уверен, что это ответ, но не с помощью трубы-специальный файл помощи в этом случае? – unxnut

+0

В качестве примечания, вы можете быть заинтересованы в 'popen()'. – FatalError

+0

Я знаю, что есть способ без перенаправления stdin/out, но я хочу сделать это вот так: – arnoapp

ответ

3

Вы не вызываете pipe(2) в свою программу. Я думаю, ваш

int pipe(int fd[2]); 

должен быть

pipe(fd); 
+0

In Что за глупая ошибка - Спасибо U! – arnoapp

Смежные вопросы