Я видел много примеров каналов, которые читают от потомка и пишут родителю или наоборот.Например:
/* this example shows how unnamed pipes may be used */
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int main() {
int ret_val;
int pfd[2];
char buff[32];
char string1[]="String for pipe I/O";
ret_val = pipe(pfd); /* Create pipe */
if (ret_val != 0) { /* Test for success */
printf("Unable to create a pipe; errno=%d\n",errno);
exit(1); /* Print error message and exit */
}
if (fork() == 0) {
/* child program */
close(pfd[0]); /* close the read end */
ret_val = write(pfd[1],string1,strlen(string1)); /*Write to pipe*/
if (ret_val != strlen(string1)) {
printf("Write did not return expected value\n");
exit(2); /* Print error message and exit */
}
}
else {
/* parent program */
close(pfd[1]); /* close the write end of pipe */
ret_val = read(pfd[0],buff,strlen(string1)); /* Read from pipe */
if (ret_val != strlen(string1)) {
printf("Read did not return expected value\n");
exit(3); /* Print error message and exit */
}
printf("parent read %s from the child program\n",buff);
}
exit(0);
}
Однако мне нужно записать строку в дочерний процесс, затем выполнить некоторые манипуляции со строками, а затем записать ее обратно в родительский процесс.Таким образом, каждый родитель / ребенок должен читать и писать.Проблема в синхронизации или в чем-то другом, потому что, когда я пытаюсь прочитать строку, которой манипулируют, в родительском процессе, дочерний процесс уже завершился, и поэтому строка является мусором.Я новичок в трубах, но я пробовал sleep () и wait (), но безрезультатно, есть предложения?