J'essaie de changer les permissions d'un tas de fichiers qui se trouvent dans un répertoire spécifique. J'utilise chmod pour le faire. La fonction ne renvoie aucune erreur, mais lorsque j'imprime l'ancienne et la nouvelle permissions, il ne semble pas qu'elle change quoi que ce soit.C - chmod() ne change pas les permissions
void main(int argc, char *argv[]){
struct stat archivo;
char *directorio = "/home/edu/Escritorio/P7/practica7/prueba";
char *rutaRel = malloc(strlen(directorio) + 1 + NAME_MAX);
mode_t permisos;
modo = strtol(argv[2], NULL, 0); //I am trying with 0664
strcpy(rutaRel, directorio);
rutaRel[strlen(directorio)] = '/';
while (ep = readdir (dp)){
strcpy(rutaRel + strlen(directorio) + 1, ep->d_name);
stat(rutaRel, &archivo);
if(S_ISREG(archivo.st_mode)){
permisos=archivo.st_mode;
if((chmod(rutaRel,modo))==-1){
perror("Error: \n");
}
printf(" %s: %u -> %u\n",ep->d_name,permisos,archivo.st_mode);
}
}
closedir(dp);
}
Je n'ai pas réussi à localiser l'erreur jusqu'à présent. Des idées?
SORTIE:
a4: 33204 -> 33204
a2: 33204 -> 33204
A3: 33204 -> 33204
a5: 33204 -> 33204
a1: 33204 -> 33204
Les permissions seraient plus faciles à comprendre si vous utilisiez '% o' pour les imprimer en octal plutôt que'% u' pour les imprimer en décimal. Votre variable 'archivo' capture les permissions au moment où' stat() 'est appelé. Il ne suit pas la modification apportée par 'chmod()'; vous devez appeler 'stat()' à nouveau pour obtenir la valeur mise à jour. –