[C] Creazione directory 777 [Risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

[C] Creazione directory 777 [Risolto]

Messaggio 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() ?
Ultima modifica di Dani il mer 12 mar 2008, 3:35, modificato 1 volta in totale.

birg81
Linux 3.x
Linux 3.x
Messaggi: 760
Iscritto il: lun 16 gen 2006, 10:57
Nome Cognome: Biagio
Slackware: 12.2
Kernel: 3.4.7
Desktop: LxDE
Distribuzione: ArchLinux
Località: Castellammare di Stabia (NA)
Contatta:

Re: [C] Creazione directory 777

Messaggio 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

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [C] Creazione directory 777

Messaggio 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.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [C] Creazione directory 777

Messaggio da Mario Vanoni »

Concordo con 414N,
prima umask(2) poi mkdir(2), nello stesso programma!

Avatar utente
ccts2002
Linux 1.x
Linux 1.x
Messaggi: 155
Iscritto il: gio 9 nov 2006, 23:20
Località: milano - trieste - catania
Contatta:

Re: [C] Creazione directory 777

Messaggio da ccts2002 »

ma il comando mkdir() a quale libreria appartiene? :shock: :shock:

Avatar utente
FireEater
Linux 3.x
Linux 3.x
Messaggi: 508
Iscritto il: sab 5 feb 2005, 0:00
Nome Cognome: Giuseppe M.
Slackware: Current
Kernel: 2.6.32.7-smp
Desktop: kde 4.3.4
Località: Cagliari <---> Torino

Re: [C] Creazione directory 777

Messaggio 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à.

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: [C] Creazione directory 777

Messaggio 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

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: [C] Creazione directory 777

Messaggio 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.

Dani
Linux 4.x
Linux 4.x
Messaggi: 1447
Iscritto il: mer 26 apr 2006, 1:52
Desktop: gnome
Distribuzione: arch

Re: [C] Creazione directory 777

Messaggio da Dani »

Bene, grazie !

Rispondi