[C]Program z buforami

0

Witam!
Mam do napisania taki oto program:

"W systemie są dwa bufory cykliczne b1 i b2. Procesy P1, ..., Pn produkują cyklicznie, niezależnie od siebie, porcje informacji i wstawiają je do bufora b1. Proces S pobiera porcje z bufora b1 i przetwarza je na jedną porcję wstawianą do bufora b2. Proces K czeka na całkowite wypełnienie bufora b2 po czym konsumuje cały bufor na raz. "

Nie wiem jaką koncepcję tu zastosować. Czy potoki, czy fifo, ktoś doradzał mi żeby to zrobić na "czytelników i pisarzy". Macie jakieś pomysły?

Bo na razie wygląda to dość nieciekawie:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

char b1 [250];
char b2 [250];
int NUM=5;
char tekst[] = {"12345"};

int main()
{
int i;
pid_t child_pid[NUM],childpid_S,childpid_K;

for(i=0;i<NUM;i++)
{
     child_pid[i] = fork();
     if (child_pid[i] == 0)
     {
         printf("Wykonuje proces P[%d] \n",i);
        
         for(i=0;i<5;i++)
         {
             sprintf(b1[i],"%c",tekst[i]);
             printf("%c",b1[i]);
         }
     }

}

//childpid_S = fork();
if((childpid_S =fork())== 0)
{
    printf("Wykonuje proces S \n");
    sprintf(b2,"%c",b1);
    printf("",b2);    
}
exit(childpid_S);
//childpid_K = fork();
if((childpid_K=fork()) == 0)
{
    printf("Proces K czysci bufor! \n");
}
exit(childpid_K);
return 0;
0

Dokladnie tak jak ktos Ci podpowiedzial. Ten przyklad to prawieze klasyczni 'producenci i konsumenci', czyli czytelnicy-pisarze wg innej nomenklatury.. Wrzuc taka nazwe problemu na google i znajdziesz szybko kilka ladnych opisow klarujacych zarowno w czym problem, jak i jak go rozwiazac z pomoca synchronizacji.
Ano wlasnie --- zwroc uwage na pierwsze linie zadania: bufory maja byc CYKLICZNE. Na fifo czy potokach (defacto, to prawie to samo, jak nie calkiem to samo) bedzie Ci szalenie trudno uzyskac cyklicznosc. Ja tutaj widze raczej kilka plikow-bufor na dysku i czytanie/zapisywanie blokami na okreslone offsety, albo wspoldzielone tablice w shared memory

1 użytkowników online, w tym zalogowanych: 0, gości: 1