2016-10-15 2 views
-2

Я посмотрел на все, и я не могу понять, как это сделать.Передача pipefd через execlp в C

У меня есть родительский процесс, который создал трубу()

Теперь я хочу, чтобы вилка() родитель, а затем функции имеют() и передать трубу() к новой программе в качестве аргумента командной строки ,

Затем изнутри новой программы мне нужно уметь читать pipefd.

Я видел кучу вещей о том, как это сделать изнутри того же процесса, но не о том, как это сделать.

Редактировать: Первоначальная публикация/была довольно расплывчатой.

То, что я до сих пор:

int pfd[2]; 
    if(pipe(pfd) == -1) { 
      perror("Creating pipe\n"); 
      exit(1); 
    } 
pid_t pid = fork(); 
if(pid == -1) { 
      fprintf (stderr, "Initiator Error Message : fork failed\n"); 
      return -1; 
    } 
else if(pid == 0) { // child process 
      close(pipe0[1]);  // close(write); 

      execlp("program", "program", pipe0[0], NULL); 
    } 

, но тогда я не понимаю, что я должен сделать из внутри «программы», чтобы получить FD. Я пытался назначить его на всевозможные вещи, но все они кажутся ошибкой.

Спасибо заранее!

+0

Что мешает вам делать что именно? Где у вас проблемы? Знаете ли вы, что делает 'dup2' и как его использовать? –

+0

Я не могу понять, как взять fd в дочерней программе. – lexIcon

+0

Что вы имеете в виду, передав fd в качестве аргумента? –

ответ

0

Раздвоенные и execed ребенок автоматически наследуют дескрипторы открытых труб и выходная трубу обычно подаются в качестве стандартного ввода, так что аргумент командной строки, чтобы найти трубу довольно лишний:

if(!pipe(&pipefd)) 
    switch(fork()) { 
    case 0: !dup2(pipefd[0],0)&& 
      execlp("cat","cat","-n","/dev/fd/0",0); 
    case -1: return perror("fork"); 
    default: write(pipefd[1],"OK\n",3); 
} 

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

  • Нет связанных вопросов^_^