【发布时间】:2017-05-08 08:20:37
【问题描述】:
我正在尝试更改位于特定目录中的一堆文件的权限。我正在使用 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()以获取更新后的值。
标签: c file directory file-permissions chmod