J'essaie de faire une simple fourche -> exécuter un autre programme -> dire "bonjour" à ce processus enfant -> relire quelque chose -> imprimer ce que reçu.C: dup2, pipe et fork ne fonctionnant pas comme prévu
Le programme utilisé en tant qu'enfant attend juste n'importe quelle ligne d'entrée et imprime quelque chose à la sortie stdout comme "bonjour là!"
Ceci est mon "hôte" du programme (qui ne fonctionne pas):
#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);
}
}
Je reçois ceci:
child
[.. waits 1 second ..]
parent
received:
Qu'est-ce que je manque? Merci!
EDIT (test.c):
Sur demande, c'est le programme des enfants:
#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;
}
[Selon la spécification POSIX] (http://pubs.opengroup.org/onlinepubs/009604599/functions/pipe.html) sur 'pipe', *" Il n'est pas spécifié si fildes [0] est également ouvert pour écrire et si fildes [1] est également ouvert à la lecture. "* – Jason
Oui, si vous voulez un canal bidirectionnel garanti vous avez besoin de' socketpair' ou d'un pseudoterminal. – zwol