Пытаюсь сделать так, чтоб родительский и дочерний процесс общались чз пайп
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
#include <stdio.h>
#define FD_READ_END 0
#define FD_WRITE_END 1
int p2c[2];
int c2p[2];
int main()
{
pipe(p2c);
pipe(c2p);
pid_t cpid;
if ((cpid = fork()) == 0)
{
close(p2c[FD_WRITE_END]);
close(c2p[FD_READ_END]);
for (int i=0; i<5; ++i)
{
FILE *r_stream = fdopen(p2c[FD_READ_END], "r");
FILE *w_stream = fdopen(c2p[FD_WRITE_END], "w");
char buf[1024];
fprintf(stdout, "CHILD: waiting for request from parent\n");
fflush(stdout);
fgets(buf, sizeof(buf), r_stream);
fprintf(stdout, "CHILD: geted request from parent \"%s\"\n", buf);
fprintf(stdout, "CHILD: sending reply\n");
fflush(stdout);
fprintf(w_stream, "reply on mes - %s", buf);
fflush(w_stream);
}
}
else
{
close(p2c[FD_READ_END]);
close(c2p[FD_WRITE_END]);
FILE *r_stream = fdopen(c2p[FD_READ_END], "r");
FILE *w_stream = fdopen(p2c[FD_WRITE_END], "w");
char buf[1024];
for (int i=0; i<5; ++i)
{
fprintf(stdout, "PARENT: send to children mes #%d\n", i+1);
fflush(stdout);
fprintf(w_stream, "mes #%d from parent", i+1);
fflush(w_stream);
fprintf(stdout, "PARENT: waiting for reply on mes #%d\n", i+1);
fflush(stdout);
fgets(buf, sizeof(buf), r_stream);
fprintf(stdout, "PARENT: geted reply from children on mes #%d: \"%s\"\n", i+1, buf);
fflush(stdout);
}
}
int status;
wait(&status);
return 0;
}Но дочерний процесс блокируется на строчке чтения данных от родителя, а родитель на строчке чтения данных от потомка. После каждой записи вызываю fflush, вроде все должно работать. Что не так?
