Я пытаюсь выполнить простую вилку -> выполнить другую программу -> поздороваться с этим дочерним процессом -> прочитать что-то -> напечатать то, что полученный.
Программа, используемая как дочерняя, просто ждет любой строки ввода и выводит что-то в стандартный вывод, например «привет, там!»
Это моя «основная» программа (которая не работает):
#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;
}