[ antix @ 21.05.2003. 19:11 ] @
evo sta me zanima: kako sistemski poziv read (pri radu sa pajpovima) zna da li treba da se blokira i da ceka sledeci upis ili vise niko nece pisati u taj pajp pa treba da zavrsi sa radom??? Naime, zamislite da jedan proces pravi svog potomka i potomak ce da salje roditelju neke podatke (u vise navrata) preko pajpa, a roditelj ce da cita te podatke (u vise navrata) iz tog istog pajpa... evo otprilike koda: ... int tmp,status,pid,i; int [2] fd; tip podaci; ... tmp=pipe(fd); pid=fork(); if(pid=0){ tmp=close(fd[1]); for(i=0;i<200;i++){ tmp=write(fd[0],&podaci,velicina_podataka) } }else{ tmp=read(fd[1],&podaci,velicina_podataka); while(tmp>0){ ispisipodatke(); tmp=read(fd[1],&podaci,velicina_podataka) } } ... e, sad posto poslije poziva fork()-a moze da se izvrsava ili roditelj ili potomak (ne znamo) zamislite da se prvo izvrsi roditelj i proba da procita prvi podatak!!! Posto potomak nije upisao nista u pajp onda ce on da procita 0 bajtova i kraj???? Kako zna da treba da ceka upis, a ne da se zavrsi bas tu??? |