Я пытаюсь написать программу, которая инициализирует целое число в родительском элементе, а затем в первом fork () мы берем это значение, увеличиваем его и передаем по трубе следующему процессу, вызываемому текущим дочерним элементом. Это продолжается еще 2 раза. Моя проблема в том, что я устанавливаю целое число равным 96, и в идеале, поскольку у нас есть 3 процесса, программа должна вернуть 99. Но вместо этого она возвращает «a», что означает, что она увеличилась только один раз. Это мой код:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
int main(int argc, char **argv)
{
int status;
int i;
int pipes[4];
pipe(pipes);
pipe(pipes + 2);
int num = 96;
if (fork() == 0)
{
dup2(pipes[1], 1);
close(pipes[0]);
close(pipes[1]);
close(pipes[2]);
close(pipes[3]);
num++;
write(pipes[1], &num, sizeof(int));
}
else
{
if (fork() == 0)
{
dup2(pipes[0], 0);
dup2(pipes[3], 1);
close(pipes[0]);
close(pipes[1]);
close(pipes[2]);
close(pipes[3]);
read(pipes[0], &num, sizeof(int));
num++;
write(pipes[3], &num, sizeof(int));
}
else
{
if (fork() == 0)
{
dup2(pipes[2], 0);
close(pipes[0]);
close(pipes[1]);
close(pipes[2]);
close(pipes[3]);
read(pipes[2], &num, sizeof(int));
num++;
write(1, &num, sizeof(int));
}
}
}
close(pipes[0]);
close(pipes[1]);
close(pipes[2]);
close(pipes[3]);
for (i = 0; i < 3; i++)
wait(&status);
}
- Как мне сделать так, чтобы печаталось целое число?
- Почему мое приращение работает только один раз?