特定のディレクトリにある一連のファイルのアクセス許可を変更しようとしています。私はそうするために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);
}
これまでエラーを特定できませんでした。何か案は?
OUTPUT:
A4:33204 - > 33204
A2:33204 - > 33204
A3:33204 - > 33204
A5:33204 - > 33204
a1:33204 - > 33204
パーミッションは '%o'を使って10進数で出力するために'%u'ではなく8進数で出力すると分かりやすくなります。あなたの 'archivo'変数は、' stat() 'が呼び出されたときにパーミッションを取得します。 'chmod()'によって行われた変更は追跡されません。更新された値を取得するには 'stat()'をもう一度呼び出す必要があります。 –