Bacteria

Abel Naya


/*
Bacteria:
Programa sencillo que crea dos copias exactas de si mismo (en realidad solo una) manteniendo el nombre de archivo y su extensión, pero uno añadiendo r y otro añadiendo l.
*/

#include <stdio.h>
#include <string.h>

int main(int argc,char*argv[])
{

//archivos
FILE *madre,*hija;

//longitud cadena
int longitud=strlen(argv[0]);

//directorios
char dmadre[longitud+2],dhija[longitud+2];

//copia el directorio
strcpy(dmadre,argv[0]);

//modifica el directorio añadiendo 'r' y 'l' a los dos archivos (de Right y Left) despues del nombre pero antes de la extensión (lo que va tras el último punto)
int i;
for(i=longitud+1;dmadre[i]!='.';i--)
{
dmadre[i]=dmadre[i-1];
}
strcpy(dhija,dmadre);
dmadre[i]='r';
dhija[i]='l';

//printf("%s\n\n%s\n\n",dmadre,dhija);

//el archivo original se convierte en una hija
rename(argv[0],dmadre);

//se copia el contenido en otro que se crea
madre=fopen(dmadre,"rb");
hija=fopen(dhija,"wb");
char c;
do
{
c=fgetc(madre);
fputc(c,hija);
}while(!feof(madre));

return 0;

}

Anuncios
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

3 respuestas a Bacteria

  1. ¿Por qué esa construcción tan complicada de los nombres de dmadre y dhija cuando lo podrías hacer directamente evitando todo ese lioso bucle?.

    • Abel Naya
      Cuando dices directamente, no se exactamente a lo que te refieres.
      La clave del programa esta en que el nombre de los dos archivos finales son identicos al inicial excepto en la ‘r’ y la ‘l’, pero sin modificar su extensión. De esta forma da igual cual sea el nombre del archivo, siempre podras ejecutar los subsiguientes archivos. Si el nombre fuera predefinido, solo se podría ejecutar una vez ya que en la siguiente esos nombre ya estarían ocupados.
      Si te refieres a lo que yo digo, y hay alguna manera mas sencilla de hacerlo coméntala.
      NOTA: he cambiado el bucle para hacerlo aún mas corto y universal. Ahora el archivo puede tener la extensión que sea.

  2. Ahora está más claro ese bucle y la duplicación del fichero. Si metieses ahora el programa en un bucle infinito o en una recursión, donde dmadre y dhija se siguiesen replicando tendrías creado un potente virus o “colonia de bacterias” que acabarían reventando el disco duro. Is it right?. Si es así, intenta rehacer este programa replicativo en otro post para por ejemplo 10 generaciones de bacterias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s