Я пытаюсь изменить разрешения группы файлов, которые находятся в определенном каталоге. Я использую chmod для этого. Функция не возвращает никаких ошибок, но когда я печатаю старые и новые разрешения, это не похоже, что это что-то меняет.C - chmod() не меняя разрешения
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);
}
Я пока не смог найти ошибку. Есть идеи?
ВЫВОД:
a4: 33204 -> 33204
a2: 33204 -> 33204
A3: 33204 -> 33204
a5: 33204 -> 33204
a1: 33204 -> 33204
Разрешения были бы легче понять, если вы используете '% o' для печати в восьмеричном, а не'% u', чтобы печатать их в десятичном формате. Ваша переменная 'archivo' захватывает разрешения в момент вызова' stat() '. Он не отслеживает изменения, сделанные 'chmod()'; вы должны снова вызвать 'stat()' для получения обновленного значения. –