[so] descriptori deschsi

Stefan Bucur stefan.bucur at gmail.com
Fri Nov 2 22:28:53 EET 2007


On Nov 2, 2007 6:07 PM, Catalin Iacob <iacobcatalin at gmail.com> wrote:
> > On Friday 02 November 2007 17:51:12 Catalin Iacob wrote:
> >
> > Daca nu i-ai redirectat e ok sa-i lasi asa. Gandeste-te ca in aplicatii nu
> > faci inchiderea lui 0 1 si 2.
> >
> > Daca ai redirectat 1 de exemplu: duplici file descriptor-ul a in 1, 1 era
> > deschis, dup2 il inchide pe 1 (atentie: din cauza asta trebuie sa faci dup2
> > dupa fork altfel inchizi si stdout-ul parintelui); tu trebuie sa-l inchizi
> > pe a. Deci 1 redirectat nu trebuie lasat deschis (desi nu mai e 1, e noul
> > file descriptor - a in exemplu).
> >
> > Catalin
>
> Am zis o tampenie dar mi-am dat seama abia dupa ce am dat send :-D. Fiindca
> dupa dup2 urmeaza exec, procesul pe care il executi o sa foloseasca file
> descriptor-ul (a din exemplul de sus) si la un moment dat o sa-l inchida el
> deci nu trebuie facuta explicit inchiderea de tine.

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

Stefan Bucur
grupa 341CA


More information about the so mailing list