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???
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???