PDA

View Full Version : [C] Effettuare una 'stat'


Ed_Bunker
20-07-2004, 01:07
Ciao, faccio una stat su una directory passata da linea di comando e, prima di tentarne la apertura, vorrei controllare che sia effettivamente una directory e che, chi ha lanciato il comando, abbia i diritti per accedervi. In particolare vorrei permettere l'apertura solo se la directory indicata e' accessibile in LETTURA sia al "group" che ad "other". So che il field "st_mode" (Della struct stat) e' quello di riferimento per questa "questione". Ci sono delle macro apposite(S_IRUSR, S_IRGRP, etc.), riferite ai possibili valori di st_mode, con le quali, appunto, poter capire i diritti di accesso della directory. Il problema e' che non so come "utilizzarle"... :confused: :cry: Pertanto... per controllare che la directory su cui ho fatto la stat sia accessibile in lettura sia a 'group' che ad 'other' quale CONDIZIONE deve valere su st_mode ?!?

thks :D

ilsensine
20-07-2004, 08:31
Usando man fstat...

(st.st_mode & (S_IROTH|S_IXOTH|S_IRGRP|S_IXGRP|S_IRUSR|S_IXUSR)) ==
(S_IROTH|S_IXOTH|S_IRGRP|S_IXGRP|S_IRUSR|S_IXUSR)


Nota che per le directory devi controllare anche i diritti di esecuzione, che per le directory hanno il particolare significato di "diritti per entrare".

Ed_Bunker
20-07-2004, 09:57
Originariamente inviato da ilsensine
Usando man fstat...

(st.st_mode & (S_IROTH|S_IXOTH|S_IRGRP|S_IXGRP|S_IRUSR|S_IXUSR)) ==
(S_IROTH|S_IXOTH|S_IRGRP|S_IXGRP|S_IRUSR|S_IXUSR)


Nota che per le directory devi controllare anche i diritti di esecuzione, che per le directory hanno il particolare significato di "diritti per entrare".

Avevo guardato "man stat" (Lo stesso di man fstat) ed avevo visto le macro per i diritti d'accesso; il problema e' che non sapevo come utilizzarle.
:rolleyes:
Cmq. grazie per la dritta ! ;)

Ed_Bunker
20-07-2004, 13:43
Altro problemino... sapreste dirmi come poter evitare di prendere in considerazione link a directory ?!? Il fatto e' che il tipo di questi risulta essere "sconosciuto" e, pur mettendo come condizione (S_ISDIR(infoStat.st_mode) && !S_ISLNK(infoStat.st_mode)), questi vengono ugualmente presi in considerazione cosicche', quando faccio la opendir, mi viene restituito errore poiche' la directory non e' accessibile dalla precedente directory corrente (Non so se mi sono spiegato molto bene... :rolleyes: )

thks

ilsensine
20-07-2004, 15:10
lstat?

Ed_Bunker
20-07-2004, 16:38
Originariamente inviato da ilsensine
lstat?
Eppure mi basterebbe guardare un po' piu' attentamente il man... :D

P.S.: thks ;)

ilsensine
20-07-2004, 16:44
Originariamente inviato da Ed_Bunker
Eppure mi basterebbe guardare un po' piu' attentamente il man... :D

Sė, come i bambini GUARDANO le figure sui libri :D

Basterebbe LEGGERLO, il man :D