У меня есть школьное задание, которое говорит мне синхронизировать c n число процессов, использующих запись и чтение канала, я знаю, как синхронизировать c с 3 процессами, но сейчас у меня нет фиксированного числа детей чтобы создать. Для синхронизации c 3 процессов я использовал 3 канала и 3 файловых дескриптора, но теперь мне нужно создать канал и файловый дескриптор для каждого ребенка, но я не знаю, сколько у меня детей, потому что это пользователи вход. Мой вопрос: как мне синхронизировать c процессы, используя каналы, не зная, сколько каналов мне нужно?
Мне нужно печатать номер процесса, id и счетчик al oop до тех пор, пока пользователь не введет Ctrl ^ c
Обновление: я думаю, что я решил проблему создания N каналов с N fd массивами, моя реальная проблема заключается в том, как синхронизировать c N процессов для печати сообщения по порядку от первого до последнего потомка один и не в случайном порядке
Обновление 2: мне удалось синхронизировать c процессы, но он не l oop и зависает при последнем процессе
Мне нужна помощь Прошло 5 дней с тех пор, как я начал, и я схожу с ума
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *ptr=argv[1];
char inbuf[5];
int n=atoi(ptr);//number of processes to be created
//int **fdArray;
//fdArray= (int**)malloc(n*sizeof(int*));
//int fd[2];
int fd[n][2];
for(int i=0;i<n;i++)
{
//fdArray[i]=fd;
pipe(fd[i]);
}
write(fd[0][1],"d",1);
//write gia na mplokareis to prwto pedi
for(int i=0;i<n;i++)
if(fork()==0)
{
while(1)
{
read(fd[i][0],inbuf,1);
write(fd[i+1][1],"d",1);
printf("Process %d has process id %d i= %d \n",i,getpid(),i);
// an en i teleftea na gra4ei sti prwti alliws stin epomeni
if(i==n-1)
{
write(fd[0][1],"d",1);
read(fd[i][0],inbuf,1);
}
else if(i<n)
{
write(fd[i+1][1],"d",1);
read(fd[i][0],inbuf,1);
}
}
}
for(int i=0;i<n;i++)
wait(NULL);
return 0;
}