#include #include #include #include #include #include #include #include int cambia_permisos (char *); int main(int argc, char * argv[]) { DIR * dir; int cont_modificados=0; char directorio[300]; char ruta[300]; struct dirent * ficheros_dir; //control de errores if (argc==1) strcpy(directorio,"."); else if (argc==2) strcpy(directorio,argv[1]); else { printf("tienes que introducir solo un nombre de directorio.\n"); exit(0); } dir=opendir(directorio); while ((ficheros_dir=readdir(dir))!= NULL) { sprintf(ruta,"%s/%s",directorio,ficheros_dir->d_name); cont_modificados+=cambia_permisos(ruta); } printf("Se han modificado un total de %d ficheros y/o directorios.\n",cont_modificados); return 0; } /*************************************/ int cambia_permisos(char * fichero) { struct stat info; if (stat(fichero,&info)==-1) { printf("Error al obtener la informacion del nodo del directorio.\n"); exit(0); } if((info.st_mode & 7)==7) { //se quiere dar los permisos de ??? ??? --- manteniendo los que ya tiene-> se usa la operacion and con 111 111 000-> 7 7 0 if (chmod(fichero,info.st_mode & 0770)==-1) return 0; else return 1; } return 0; }