Repository 32bit  Forum
Repository 64bit  Wiki

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

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

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
birg81
Linux 2.6
Linux 2.6
 
Messaggi: 760
Iscritto il: lun gen 16, 2006 10:57
Località: Castellammare di Stabia (NA)
Nome Cognome: Biagio
Slackware: 12.2
Kernel: 3.4.7
Desktop: LxDE
Distribuzione: ArchLinux

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.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2876
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

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!
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

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
ccts2002
Linux 2.0
Linux 2.0
 
Messaggi: 155
Iscritto il: gio nov 09, 2006 23:20
Località: milano - trieste - catania

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

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

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.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2876
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C] Creazione directory 777

Messaggioda Dani » mer mar 12, 2008 3:35

Bene, grazie !
Dani
Linux 3.x
Linux 3.x
 
Messaggi: 1447
Iscritto il: mer apr 26, 2006 0:52
Desktop: gnome
Distribuzione: arch


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti