Les deux sens de la Communication Parent-Enfant à l'Aide de 2 Tuyaux en C sous Linux

Je suis en train de créer une communication à deux voies entre le parent et l'enfant, les processus à l'aide de 2 tuyaux à l'aide de C sur Linux. Le parent est mon programme et que l'enfant est juste un hasard de programme (dire "chat").

J'essaie de utilise read() parents à lire à l'enfant de sortie, mais il me donne errno 9, ce qui est Mauvais descripteur de fichier.

Voici mon code

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

#define Read            0
#define Write           1
#define ParentRead      read_pipe[1]
#define ParentWrite     write_pipe[0]
#define ChildRead       write_pipe[1]
#define ChildWrite      read_pipe[0]

int main()
{
    int data_processed;

    /** Pipe for reading for subprocess */
    int read_pipe[2];
    /** Pipe for writing to subprocess */
    int write_pipe[2];

    char buffer[100];
    memset(buffer, '
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#define Read            0
#define Write           1
#define ParentRead      read_pipe[1]
#define ParentWrite     write_pipe[0]
#define ChildRead       write_pipe[1]
#define ChildWrite      read_pipe[0]
int main()
{
int data_processed;
/** Pipe for reading for subprocess */
int read_pipe[2];
/** Pipe for writing to subprocess */
int write_pipe[2];
char buffer[100];
memset(buffer, '\0', 100);
if (pipe(read_pipe) == 0 && pipe(write_pipe) == 0)
{
pid_t pid = fork();
if (pid == (pid_t)-1)
{
fprintf(stderr, "Fork failure");
exit(EXIT_FAILURE);
}
else if (pid == (pid_t)0) //Child process
{
close(Read);
close(Write);
close(ParentRead);
close(ParentWrite);
dup(ChildRead);
dup(ChildWrite);
execlp("cat", (char*)NULL);
exit(EXIT_FAILURE);
}
else { //Parent process
close(ChildRead);
close(ChildWrite);
write(ParentWrite, "abc", 3);
int r = read(ParentRead, buffer, 99);
printf("%d %d", r, errno);
puts(buffer);
}
}
exit(EXIT_SUCCESS);
}
'
, 100); if (pipe(read_pipe) == 0 && pipe(write_pipe) == 0) { pid_t pid = fork(); if (pid == (pid_t)-1) { fprintf(stderr, "Fork failure"); exit(EXIT_FAILURE); } else if (pid == (pid_t)0) //Child process { close(Read); close(Write); close(ParentRead); close(ParentWrite); dup(ChildRead); dup(ChildWrite); execlp("cat", (char*)NULL); exit(EXIT_FAILURE); } else { //Parent process close(ChildRead); close(ChildWrite); write(ParentWrite, "abc", 3); int r = read(ParentRead, buffer, 99); printf("%d %d", r, errno); puts(buffer); } } exit(EXIT_SUCCESS); }
open( ) les tuyaux avant de faire des I/O.
N'est-ce pas (pipe(read_pipe) == 0 && pipe(write_pipe) == 0) même chose que l'ouverture des tuyaux?
Oui, c'est la même chose.

OriginalL'auteur Jeff | 2012-02-16