[so] [Tema1][Linux] Problema la pipe

Mircea Gherzan mgherzan at anaconda.cs.pub.ro
Fri Jul 18 01:19:39 EEST 2008


Alex wrote:
> Dupa ce l-am zapacit prima data am zis ca reiau si am gandit altfel
> programul,am facut si un prg de test de 50 linii de cod si
> mergea...dar in tema acceasi idee nu merge. Iata cum am gandit: Cand
> intalnesc primul operator pipe creez recursiv pentru toate
> subnodurile lui care nu sunt comenzi simple cate 2 file descriptori
> in aux(din structura arborelui). Apoi dau drumu la executia
> proceselor in ordine. Dupa executia comenzilor din primul op pipe
> distrug adica dau free la toti file descriptorii alocati (ii inchid
> inainte),fac waitpid(-1,&status,0) pt a astepta toti copiii. In copil
> tin cont si fac toate legaturile necesare intre procese__ inainte de
> exec (le-am printat...sunt ok...zic eu :D ).Dupa ce fac legaturile
> inchid in copil toate celelalte pipe-uri(s-au copiat din parinte unde
> erau deschise deja).

Pentru o comanda precum cmd1 | cmd2 | cmdN ,  cele N procese trebuie
executate in paralel, si nu "in ordine". Capacitate unui pipe este
evident finita (64K), iar eventuale apeluri ar putea  write() pot bloca
pana la preluarea de octeti.


-- 
Mircea Gherzan
Faculty of Automatic Control and Computers
Politehnica University of Bucharest


More information about the so mailing list