SOLUCIONADO. Por si alguien necesita el código, lo dejo como aporte.
Código (c) [Seleccionar]
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
int main(int argc, char *argv[])
{
DIR *dir;
struct dirent *ent;
char **ptr;
long octal;
if( strlen(argv[2]) != 4){
printf("\nError al introducir el numero de digitos del parametro 2\n");
exit(-1);
}
if( (dir=opendir(argv[1]))==NULL){
printf("\nError en el primer open\n");
exit(-1);
}
octal = strtol(argv[2], ptr, 8);
struct stat atributos;
int fd;
while ((ent = readdir(dir)) != NULL){
if( (strcmp(ent->d_name, ".")!=0) && (strcmp(ent->d_name, "..")!=0) ){
printf("%s", ent->d_name);
printf("%s", " : ");
if ( (stat(ent->d_name, &atributos)) <0){
printf("\nError en stat\n");
exit(-1);
}
if( (atributos.st_mode & S_IRUSR) != 0)
printf("%s", "r");
else
printf("%s", "-");
if( (atributos.st_mode & S_IWUSR) != 0)
printf("%s", "w");
else
printf("%s", "-");
if( (atributos.st_mode & S_IXUSR) != 0)
printf("%s", "x");
else
printf("%s", "-");
if( (atributos.st_mode & S_IRGRP) != 0)
printf("%s", "r");
else
printf("%s", "-");
if( (atributos.st_mode & S_IWGRP) != 0)
printf("%s", "w");
else
printf("%s", "-");
if( (atributos.st_mode & S_IXGRP) != 0)
printf("%s", "x");
else
printf("%s", "-");
if( (atributos.st_mode & S_IROTH) != 0)
printf("%s", "r");
else
printf("%s", "-");
if( (atributos.st_mode & S_IWOTH) != 0)
printf("%s", "w");
else
printf("%s", "-");
if( (atributos.st_mode & S_IXOTH) != 0)
printf("%s", "x");
else
printf("%s", "-");
printf("%s", " ");
if( (chmod(ent->d_name, octal)) <0){
printf("\nError en chmod\n");
exit(-1);
}
if ( (stat(ent->d_name, &atributos)) <0){
printf("\nError en stat\n");
exit(-1);
}
if( (atributos.st_mode & S_IRUSR) != 0)
printf("%s", "r");
else
printf("%s", "-");
if( (atributos.st_mode & S_IWUSR) != 0)
printf("%s", "w");
else
printf("%s", "-");
if( (atributos.st_mode & S_IXUSR) != 0)
printf("%s", "x");
else
printf("%s", "-");
if( (atributos.st_mode & S_IRGRP) != 0)
printf("%s", "r");
else
printf("%s", "-");
if( (atributos.st_mode & S_IWGRP) != 0)
printf("%s", "w");
else
printf("%s", "-");
if( (atributos.st_mode & S_IXGRP) != 0)
printf("%s", "x");
else
printf("%s", "-");
if( (atributos.st_mode & S_IROTH) != 0)
printf("%s", "r");
else
printf("%s", "-");
if( (atributos.st_mode & S_IWOTH) != 0)
printf("%s", "w");
else
printf("%s", "-");
if( (atributos.st_mode & S_IXOTH) != 0)
printf("%s\n", "x");
else
printf("%s\n", "-");
}
}
}