Zdravim, nenasel by se tu takovej koren kterej by nasel chybu v mym programu?program vytvori dva nove prosesy (fork) - producenta a konzumentaproducent pise do pipe cisla (1-9) a konzument je cte (a vypisuje)vse probiha skrz hlavni program (2 roury - producent-otec, otec-konzument)konzument nesmi cist kdyz producent pise a naopakoba dcerine procesy komunikuju skrze matersky pomoci signalu. Napsal sem toto, ale jede je jen obcas ... spustim to 3x ... z toh jednou to nevypise ni, po druhe tak do pulky a po treti bez chyby ... a v tom je prave ta zakernost ... diky moc vsemPS: vim ze by to bylo lepsi vlakny, ale potrebuju to takhle #include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <sys/wait.h>#include <sys/stat.h>#include <signal.h>#include <fcntl.h>#include <unistd.h>#include <string.h>static int jed=1; //konec nebo ne?static int jedc=1;static int aktivnip=0; static int aktivnic=0;static int aktivni=0;void konecc(int sig){ printf("zachycen sig rikajici aby konzument skoncil\n"); jedc=0; }void konec(int sig){ printf("zachycen sig oznamujici konec producenta\n"); jed=0; }void Signalp(int sig){ printf("zachycen signal pro aktivaci producenta\n "); aktivnip=1; }void Signalc(int sig){ printf("zachucen signal pro aktivaci konzumenta\n"); aktivnic=1; }void Signal(int sig){ printf("zachycen signal signal pro aktivaci hl. prog.\n"); aktivni=1; }int main(int argv, char *argc[]){int value = 0;pid_t pidc,pidp,papa; //id pro dcery a pro tatuint file_pipes1[2]; //producent-rodicint file_pipes2[2]; //rodic-konzumentpapa=getpid(); memset(&value, '\0', sizeof(value));if(pipe(file_pipes1)==-1) exit;if(pipe(file_pipes2)==-1) exit;pidp=fork();if(pidp==-1){ perror("nepodarilo se vytvorit novy proces"); exit(1); }if(pidp!=0){ //otcovsky procespidc=fork();if(pidc==-1){ perror("nepodarilo se vytvorit novy proces"); exit(1); }if(pidc==0){ //2. potomek - konzumentprintf("byl spusten konzumet %d\n",getpid());int… hodn=0; signal(SIGUSR2,konecc); //dostal sem od otce smrtelny rozkaz -> konec signal(SIGUSR1,Signalc);while(jedc){ while(!aktivnic) { sleep(1); printf("konzument ceka...\n"); }aktivnic=0;read(file_pipes2[0],&hodn, sizeof(hodn));printf("%d\n",hodn);kill(getppid(),SIGALRM); //uz sem skoncil, hlavni programe}printf("konec konzumenta\n");}//2.potomek}else{ //1. potomek - producentprintf("byl spusten producent %d\n",getpid());(void) signal(SIGUSR1,Signalp); //muzu zacit? int i;for(i=1;i<10;i++){while(!aktivnip){ sleep(1); } aktivnip=0;write(file_pipes1[1],&i,sizeof(i));kill(getppid(),SIGALRM); //muzes cist, hlavni programe}kill(getppid(),SIGUSR2); //otce, skoncil jsem printf("konec producenta\n");}//************************************************************* ****** if(getpid()==papa && pidp>1 && pidc>1){ //hlavni programprintf("byl spusten hl. prog. %d %d\n",getpid(),papa);(void) signal(SIGALRM,Signal); //cekam na signal pro pokracovani cinosti(void) signal(SIGUSR2,konec); //producent skoncil while(jed){if(jed) kill(pidp,SIGUSR1); //jedem.... while(!aktivni && jed){sleep(1); }aktivni=0;if(jed) read(file_pipes1[0],&value, sizeof(value)); //cti od producentawrite(file_pipes2[1],&value,sizeof(value)); //napis konzumentoviif(jed) kill(pidc,SIGUSR1); //konzument muze zacit cistwhile(!aktivni && jed){ //cekam na dokonceni cteni, od konzumentasleep(1);} aktivni=0;}kill(pidc,SIGUSR2); //ukonci konzumenta(void) signal(SIGUSR2 Ukázat celý příspěvek