[so] [Lab2] Comportament open() cu O_CREAT și fără drept RD/WR

Călin Cruceru crucerucalincristian at gmail.com
Wed Mar 9 21:32:20 EET 2016


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[1][2] (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.

[1]: https://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.14.24
(74df6af526d186c54333107219a5ff79b5e8c1d6)
[2]: http://kernel.suse.com/cgit/kernel/commit/?h=v3.14.26&id=74df6af526d186c54333107219a5ff79b5e8c1d6

Călin


More information about the so mailing list