[so] open(O_CREAT)
Razvan Deaconescu
razvan.deaconescu at cs.pub.ro
Thu Mar 5 22:40:20 EET 2009
On Thu, 2009-03-05 at 21:43 +0200, alexandrujuncu at gmail.com wrote:
> Pornind de la avertizarea "ATENŢIE! O greşeală frecventă este omiterea
> drepturilor de creare a fişierului (0644 în exemplul de mai sus) când
> se apelează open cu flag-ul O_CREAT activat. " am testat să văd care
> sunt efectele... a creat fișierul ok, doar că a dat niște drepturi
> ciudate..ba mai mult, rulat de două ori a dat drepturi diferite:
>
> -r----x--T 1 alexj alexj 0 2009-03-05 21:30 dan.txt
> ----r-x--T 1 alexj alexj 0 2009-03-05 21:32 dan.txt
> -rwSr-x--T 1 alexj alexj 0 2009-03-05 21:34 dan.txt
>
> Dar nu a dat eroare...există vreo explicație pentru comportamentul acesta?
>
> Nu am văzut nimic în lab despre umask...eram curios ce efact are
> asupra open cu O_CREAT și aparent permisiunile scrise în open sunt
> modificate din umask-ul sistemului. Putem controla DIN program acest
> lucru sau depinde de sistem?
S-ar putea sa ma insel - nu m-am uitat in codul sursa al libc, dar ...
In momentul apelului se transmit pe stiva argumentele pentru open. In
prezenta flag-ului O_CREAT, apelul asteapta trei argumente fara
enforcing in acest sens din partea compilatorului (de-asta si merge).
Daca se apeleaza O_CREAT fara mode atunci stiva arata ceva in genul
+-----------------+
| bogus |
+-----------------+
| O_CREAT | flags |
+-----------------+
| fd |
+-----------------+ <----- ESP
bogus poate fi orice pentru ca in momentul apelului functiei nu s-au
folosit trei argumente. Acel orice este ceea ce exista pe stiva in acel
moment. Drept pentru care se poate observa un comportament determinist
in functionarea unui apel open.
Cu ocazia asta va recomand glibc LXR[1] daca doriti sa va uitati prin
surse. M-am uitat ceva dupa implementarea open dar m-am pierdut printre
macrouri si functii cu __ in fata :-)
Razvan
[1] http://www.comp.ufscar.br/lxr/ident?v=glibc-2.7
More information about the so
mailing list