También me dicen que no se permite usar la orden system() o equivalente dentro del programa como podría hacerse.
Debo hacer lo siguiente:
Leer etc/group y pasarlo a una estructura llamada VGrupos.
Luego nos pedirán de forma cíclica un nombre de grupo y un GID, se llamará a una función que añada dicho grupo a la estructura VGrupos; esta función recibirá por valor el GID y nombre de grupo por referencia VGrupos.
Comprobaremos que no existe grupo con otra función, ésta usará la estructura HASH (creada antes indicando dicha situación y su GID), si no existe continúa el alta.
Cuando se pulse el nombre del grupo vacío, entendemos que no queremos seguir introduciendo grupos y pasamos nuestra estructura al fichero etc/group.
Using perl Syntax Highlighting
- opendir(DIR,"etc");
- open(USUARIOS,"etc/passwd") or die "No se puede abrir el fichero. $!";
- #Preparamos un hash que tenga para cada usuario su GID
- while($var=<USUARIOS>)
- {
- @vector=split /:/,$var;
- $usuarios{$vector[0]}=$vector[3];
- }
- close(USUARIOS);
- open(VGRUPOS,"etc/group") or die "No se puede abrir el fichero. $!";
- #Preparamos un hash que tenga para cada GID el nombre del grupo
- while($var2=<VGRUPOS>)
- {
- @vector_2=split /:/,$var2;
- $vgrupos{$vector_2[2]}=$vector_2[0];
- }
- close(VGRUPOS);
- closedir(DIR);
- #Realización de una copia de seguridad de los directorios de casa
- #de todos los usuraios para el posterior traslado de los mismos
- mkdir("Auxiliar",0777) or die "no se puede crear el directorio Auxiliar";
- system("mv home/* Auxiliar");
- opendir(HOME,"home");
- #Ahora se crean los directorios respectivos para cada grupo
- $base="home/";
- foreach $directorio(values %vgrupos)
- {
- $nombre=$base.$directorio;
- mkdir($nombre,0777) or die "No se puede crear el directorio $nombre";
- }
- closedir(HOME);
- while(($usuario,$gid)=each %usuarios)
- {
- $grupo=$vgrupos{$gid};
- $dir=$base.$grupo."/";
- $aux="Auxiliar/".$usuario;
- system("mv $aux $dir");
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4