Salutare, 2016-03-09 13:48 GMT+02:00 Roberta Dobrescu <[email protected]>: > 2016-03-09 12:18 GMT+02:00 Călin Cruceru <[email protected]>: >> Î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 _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
