[so] descriptori deschsi

Catalin Iacob iacobcatalin at gmail.com
Fri Nov 2 23:22:43 EET 2007


> On Friday 02 November 2007 22:28:53 Stefan Bucur wrote:
>
> Hm... mi se paruse ca era corect. Adica dupa ce apelezi dup2, "1" si
> "a" vor puncta catre aceeasi resursa (fisier) - daca "1" este inchis,
> "a" va tine in continuare acel fisier deschis (si viceversa). 

Corect nu se poate sa fi fost fiindca daca il inchizi pe a inainte sa faci 
exec programul executat va avea stdout inchis si deci nu va putea sa scrie in 
el. De asta am revenit cu reply-ul.

> Atata vreme cat "a" nu este close on exec, el va ramane deschis dupa exec(),
> deci chit ca uitam noi sa-l inchidem daca nu faceam exec(), chit ca
> nu-l inchide noul program incarcat de exec(), e acelasi lucru:
> sistemul de operare va inchide descriptorul acesta pentru noi la
> sfarsit. Iar daca este permis sa lasam descriptori deschisi inainte de
> exec(), de ce am 'pacatui' mai mult daca am uita descriptori deschisi
> si in programul nostru, pe care i-ar inchide oricum sistemul?

Solutia cea mai corecta ca sa zic asa e sa se seteze intr-adevar close on exec 
pe a fiindca nu-l putem inchide de mana inainte (programul executat l-ar 
primi inchis), nu-l putem inchide dupa fiindca daca exec reuseste nu mai 
putem face chestii dupa exec. Asa, cu close on exec ni-l inchide sistemul la 
exec.

Chestia cu close on exec nu e cea mai importanta din tema dar in general e 
bine sa cureti resursele chiar daca le va curata sistemul de operare. Daca 
zici ca nu e nevoie e ca si cum ai zice "eu nu fac free pe memoria alocata 
dinamic fiindca oricum cand programul se termina elibereaza memoria, de ce sa 
mai fac free de mana ca se pierde timp cu el". Ori nu-i asa; foarte multe 
programe trebuie sa ruleze mai mult timp (poate ani) si leak-urile se 
acumuleaza devenind inacceptabile. 

Catalin


More information about the so mailing list