Я не хочу писать программу, которая использует 2 канала для передачи значений между родительским и дочерним процессами. Код:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/stat.h>
#include <fcntl.h>
int mkfifo(const char *path, mode_t mode);
int main(int argc, char **argv)
{
int fd,df,val;
char * myfifo = "/tmp/myfifo";
mkfifo(myfifo, 0666);
char * myfifo2 = "/tmp/myfifo2";
mkfifo(myfifo2, 0666);
pid_t c=fork();
if(c==0){
df = open(myfifo2, O_RDONLY);
read(df, &val, sizeof(val));
close(df);
val= val+10;
df = open(myfifo2, O_WRONLY);
write(df, &val, sizeof(val));
fd = open(myfifo, O_WRONLY); //if i put this write first print works and program finishes
write(fd, &val, sizeof(val));
}
if(c>0)
{
val=1;
df = open(myfifo2, O_WRONLY);
write(df, &val, sizeof(val));
fd = open(myfifo, O_RDONLY);
read(fd, &val, sizeof(val));
printf("val is %d \n",val);
}
}
При первом чтении потомка родитель ожидает записи val в файле fifo. После этого он записывает новый val в этот файл fifo, а затем записывает значение во второй текстовый файл. Чтение в коде родителя ожидает этого так что все, что я хочу, это чтобы родительский процесс выполнил печать только после того, как дочерний процесс записал val в файл myfifo2. Такова цель второго именованного канала, который я использовал. Однако этот код получает застрял и ничего не печатает. Я заметил, что если я изменяю порядок записи двух в дочернем процессе, он работает, но он не удовлетворяет вышеуказанной вещи, в которой я нуждаюсь. Почему это происходит и как мне решить эту проблему?