C: dup2, конвейер и вилка не работают должным образом

Я пытаюсь выполнить простую вилку -> выполнить другую программу -> поздороваться с этим дочерним процессом -> прочитать что-то -> напечатать то, что полученный.

Программа, используемая как дочерняя, просто ждет любой строки ввода и выводит что-то в стандартный вывод, например «привет, там!»

Это моя «основная» программа (которая не работает):

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

#define IN 0
#define OUT 1
#define CHILD 0

main ()
{
  pid_t pid;
  int pipefd[2];
  FILE* output;
  char buf[256];

  pipe(pipefd);

  pid = fork();    
  if (pid == CHILD)
  {
    printf("child\n");
    dup2(pipefd[IN], IN);
    dup2(pipefd[OUT], OUT);
    execl("./test", "test", (char*) NULL);
  }
  else
  {
    sleep(1);
    printf("parent\n");
    write(pipefd[IN], "hello!", 10); // write message to the process    
    read(pipefd[OUT], buf, sizeof(buf));
    printf("received: %s\n", buf);
  }
}

Я получаю это :

child
[.. waits 1 second ..]
parent
received: 

Что мне не хватает? Спасибо!

РЕДАКТИРОВАТЬ (test.c):

По запросу это дочерняя программа:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int getln(char line[])
{
  int nch = 0;
  int c;

  while((c = getchar()) != EOF)
    {
      if(c == '\n') break;
    line[nch] = c;
    nch++;
    }

 if(c == EOF && nch == 0) return EOF;
 return nch;
}

main()
{
  char line[20];

  getln(line);
  printf("hello there!", line);
  fflush(stdout);  
  return 0;
}
7
задан pistacchio 28 October 2011 в 21:44
поделиться