[so] [Lab2] Comportament open() cu O_CREAT și fără drept RD/WR
Călin Cruceru
crucerucalincristian at gmail.com
Wed Mar 9 21:37:44 EET 2016
2016-03-09 21:32 GMT+02:00 Călin Cruceru <crucerucalincristian at gmail.com>:
> Salutare,
>
> 2016-03-09 13:48 GMT+02:00 Roberta Dobrescu <roberta.dobrescu at gmail.com>:
>> 2016-03-09 12:18 GMT+02:00 Călin Cruceru <so at cursuri.cs.pub.ro>:
>>> În timp ce scriam acest e-mail am citit în manualul open()[2], la
>>> flag-ul O_CREAT, următorul lucru:
>>>
>>> O_CREAT - [...]; the open() call that creates a read-only file may
>>> well return a read/write file descriptor.
>>
>> Înainte de fraza asta, în manual mai scrie: "Note that this mode applies
>> only to future accesses of the newly created file; the open() call that
>> creates a read-only file may well return a read/write file descriptor.". Cum
>> văd eu asa: am făcut open care creează un fișier cu niște permisiuni (date
>> de mode), dar acum permisiunile pe file descriptorul returnat de open am
>> permisiunile date de flaguri. Mi se pare destul de clar comportamentul.
>>
>> Roberta
>>
>
> Păi da, drepturile pentru file descriptorul curent sunt date de
> flaguri, dar mie tot mi se pare ciudat că la primul open() cu O_CREAT
> - care îl crează - nu se face verificarea că avem permisiunile pe care
> le cerem în apel ca flaguri (exemplul meu de mai devreme[1]), ceea ce
> se întâmplă în mod normal (apelul 2 open() din exemplu).
>
> Am găsit un commit în kernel care a făcut să meargă în felul ăsta și
> pentru O_TMPFILE[2][3] (aparent erau probleme de consistență cu
> O_CREAT). Nu pot spune că am înțeles motivul pentru care e așa și nu
> altfel (de exemplu să dea eroare), dar fiind o documentație veche de
> zeci de ani, bănuiesc că unele lucruri trebuiesc luate for granted.
>
Fixed the links.
[1]: https://paste.kde.org/pelfmniqm
[2]: https://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.14.24
[3]: http://kernel.suse.com/cgit/kernel/commit/?h=v3.14.26&id=74df6af526d186c54333107219a5ff79b5e8c1d6
Călin
More information about the so
mailing list