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