Pagina 1 di 1

[C] Creazione directory 777 [Risolto]

Inviato: lun 10 mar 2008, 18:54
da Dani
Ho un problemino nel settaggio dei permessi su una directory appena creata con mkdir().
In parole povere mkdir (path, 04777) mi crea la directory, ma i permessi vengono settati a 755, quindi per ora uso qualcosa del genere:

Codice: Seleziona tutto

rval = mkdir (path, 0777);
if (rval < 0) ... /* errore */
rval = chmod (path, S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH);
if (rval < 0) ... /* errore */
Nel man dice:

Codice: Seleziona tutto

 The  parameter  mode specifies the permissions to use.  It is modified by the process's umask in the usual
       way: the permissions of the created directory are (mode & ~umask & 0777).  Other mode bits of the  created
       directory depend on the operating system.  For Linux, see below.
Dunque come si fa a calcolare il secondo parametro di mkdir() a prescindere da umask considerando che si vuole ottenere una directory con permessi 777 ?
Inoltre è consigliabile settare i permessi direttamente alla creazione della directory, o è meglio farlo successivamente con chmod() ?

Re: [C] Creazione directory 777

Inviato: lun 10 mar 2008, 19:21
da birg81
scusa non è meglio se i permessi sono 755 comunque puoi sempre metterti e scrivere chmod 777 <tua_directory> e buonanotte benche' piu' dispendioso

Re: [C] Creazione directory 777

Inviato: lun 10 mar 2008, 20:27
da 414N
Dani ha scritto:

Codice: Seleziona tutto

 The  parameter  mode specifies the permissions to use.  It is modified by the process's umask in the usual
       way: the permissions of the created directory are (mode & ~umask & 0777).  Other mode bits of the  created
       directory depend on the operating system.  For Linux, see below.
Dunque come si fa a calcolare il secondo parametro di mkdir() a prescindere da umask considerando che si vuole ottenere una directory con permessi 777 ?
Inoltre è consigliabile settare i permessi direttamente alla creazione della directory, o è meglio farlo successivamente con chmod() ?
La man page ti dice che i permessi della directory saranno calcolati effettuando un AND tra mode (quella che specifichi: mettere 0777 fa passare tutto), umask del processo e 0777.
Se specificando come mode 0777 i permessi della directory risultano essere 0755, vuol dire che

Codice: Seleziona tutto

0777 & umask & 0777 = 0777 & umask = 0755 => umask = 0755.
Se proprio devi settare i permessi a 0777, puoi ridefinire la umask del processo che ospita il tuo programma tramite la funzione umask(mask) prima di una qualsiasi mkdir(). Per semplificarti la vita potresti settare la umask a inizio programma a 0777 in modo che i bit di mode da te specificati rimangano inalterati dagli AND. Vedi man 2 umask per i dettagli.
birg81 ha scritto:... e scrivere chmod 777 <tua_directory> e buonanotte benche' piu' dispendioso
Si sta parlando di un programma C, percui lanciare un comando esterno al programma è poco desiderabile.

Re: [C] Creazione directory 777

Inviato: lun 10 mar 2008, 20:40
da Mario Vanoni
Concordo con 414N,
prima umask(2) poi mkdir(2), nello stesso programma!

Re: [C] Creazione directory 777

Inviato: lun 10 mar 2008, 22:17
da ccts2002
ma il comando mkdir() a quale libreria appartiene? :shock: :shock:

Re: [C] Creazione directory 777

Inviato: lun 10 mar 2008, 22:38
da FireEater
ccts2002 ha scritto:ma il comando mkdir() a quale libreria appartiene? :shock: :shock:
man --> mkdir(2) suggerisce di usare:
#include <sys/stat.h>
#include <sys/types.h>

Anche se nei miei programmi ho sempre usato:
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>

Però facendo due prove al volo ho notato che funziona anche senza includere nessuna libreria. :-k

Aspetto qualcuno che ne sappia qualcosa in più.

cià.

Re: [C] Creazione directory 777

Inviato: lun 10 mar 2008, 22:56
da Dani
@414N: Come ottengo il valore di umask, prima di modificarlo, per poi ripristinarlo dopo aver creato la directory ?
@fire_eater: Prova a compilare con -Wall e -Werror :P

Re: [C] Creazione directory 777

Inviato: mar 11 mar 2008, 12:03
da 414N
Dalla man page di umask:
RETURN VALUE
This system call always succeeds and the previous value of the mask is
returned.
Quando chiami umask ti ritorna sempre il valore precedente della maschera.

Re: [C] Creazione directory 777

Inviato: mer 12 mar 2008, 3:35
da Dani
Bene, grazie !