#include #include #include #include #include #include #include #include #include #include int main(int argc, char * argv[]) { DIR * dir; int cont_fich=0,cont_dir=0; long tamano=0; char ruta[300]; struct dirent * ficheros_dir; struct passwd *usuario; struct stat info; if(argc!=3) { printf("Se necesitan nombre de usuario y directorio como argumentos.\n"); exit(0); } if ((dir=opendir(argv[2]))==NULL) { printf("Error al abrir el directorio.\n"); exit(0); } while ((ficheros_dir=readdir(dir))!= NULL) { sprintf(ruta,"%s/%s",argv[2],ficheros_dir->d_name); if(stat(ruta,&info)==-1) { printf("Error al obtener la informacion del nodo del fichero %s\n",ruta); exit(0); } else if(strcmp(ficheros_dir->d_name,".")!=0 && strcmp(ficheros_dir->d_name,"..")!=0) { if ((usuario=getpwuid(info.st_uid))==NULL) { printf("Error al obtener informacion de usuario"); exit(0); } else { if(strcmp(usuario->pw_name,argv[1])==0) { if((info.st_mode & 61440) == 32768)//es la mascara un fichero ordinario { cont_fich++; tamano+=info.st_size; } else if((info.st_mode & 61440) == 16384)//es la mascara de un directorio { cont_dir++; tamano+=info.st_size; } } } } } printf("El usuario %s posee %d ficheros y %d directorios, y en total hacen %ld bytes.\n",argv[1],cont_fich,cont_dir,tamano); return 0; }