[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.
Dani
Linux 3.x
Linux 3.x
Messaggi: 1447
Iscritto il: mer apr 26, 2006 1:52
Desktop: gnome
Distribuzione: arch

[C] Creazione directory 777 [Risolto]

Messaggioda Dani » lun mar 10, 2008 18:54

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 mar 12, 2008 3:35, modificato 1 volta in totale.

birg81
Linux 2.6
Linux 2.6
Messaggi: 760
Iscritto il: lun gen 16, 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

Messaggioda birg81 » lun mar 10, 2008 19:21

scusa non è meglio se i permessi sono 755 comunque puoi sempre metterti e scrivere chmod 777 <tua_cartella> e buonanotte benche' piu' dispendioso

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2893
Iscritto il: mer feb 13, 2008 16:19
Slackware: current
Kernel: 3.14.23
Desktop: KDE4
Località: Bulagna
Contatta:

Re: [C] Creazione directory 777

Messaggioda 414N » lun mar 10, 2008 20:27

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_cartella> 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 set 03, 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

Messaggioda Mario Vanoni » lun mar 10, 2008 20:40

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

Avatar utente
ccts2002
Linux 2.0
Linux 2.0
Messaggi: 155
Iscritto il: gio nov 09, 2006 23:20
Località: milano - trieste - catania
Contatta:

Re: [C] Creazione directory 777

Messaggioda ccts2002 » lun mar 10, 2008 22:17

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

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

Re: [C] Creazione directory 777

Messaggioda FireEater » lun mar 10, 2008 22:38

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 3.x
Linux 3.x
Messaggi: 1447
Iscritto il: mer apr 26, 2006 1:52
Desktop: gnome
Distribuzione: arch

Re: [C] Creazione directory 777

Messaggioda Dani » lun mar 10, 2008 22:56

@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: 2893
Iscritto il: mer feb 13, 2008 16:19
Slackware: current
Kernel: 3.14.23
Desktop: KDE4
Località: Bulagna
Contatta:

Re: [C] Creazione directory 777

Messaggioda 414N » mar mar 11, 2008 12:03

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 3.x
Linux 3.x
Messaggi: 1447
Iscritto il: mer apr 26, 2006 1:52
Desktop: gnome
Distribuzione: arch

Re: [C] Creazione directory 777

Messaggioda Dani » mer mar 12, 2008 3:35

Bene, grazie !


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti