Конвейер между двумя дочерними процессами UNIX C

Я создавал канал между двумя дочерними процессами. Один будет выводить в трубу, а другой будет вводить из трубы. Мне удалось разобрать команду и параметры, необходимые для выполнения команды (или 2, так как это канал). Однако я думаю, что моя труба настроена неправильно:

[...] 
type_prompt(); //Type out prompt to the user
read_command(); //Read the command from the user

pipe(&fd[0]); //Create a pipe
proc1 = fork();

//Child process 1
if (proc1 == 0)
{
close(fd[0]); //process1 doenst need to read from pipe
dup2(fd[1], STD_INPUT);
close(fd[1]);
execvp(parameter[0], parameter); //Execute the process
}

//Create a second child process
else
{
//Child process 2
proc2 = fork();
if (proc2 == 0)
{
close(fd[1]);
dup2(fd[0], STD_OUTPUT);
close(fd[0]);
execvp(parameter2[0], parameter2);
}
//Parent process
else
{
waitpid(-1, &status, 0); //Wait for the child to be done
}
}

person Josh    schedule 11.10.2011    source источник
comment
Откуда функция getline()? Если это тот, что из GCC, вы должны использовать с ним динамически выделяемый буфер.   -  person Kurt Stutsman    schedule 11.10.2011


Ответы (1)


Вы должны передать указатель на буфер, выделенный с помощью malloc, в качестве первого аргумента для getline, например:

  int bytes_read;
  int nbytes = 100;
  char *my_string;

  /* These 2 lines are the heart of the program. */
  my_string = (char *) malloc (nbytes + 1);
  bytes_read = getline (&my_string, &nbytes, stdin);

См. http://www.craseux.com/books/ctutorial/getline.html подробнее (приведенный выше пример взят оттуда и уменьшен).

person vitaut    schedule 11.10.2011