[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