Security Dojo

Programacion “Extrema”

abril 14th, 2008 por Enrique Alfonso Sanchez Montellano

Programacion Extrema NO es una programacion que sube montanas, anda en motocross y se avienta escaladas libres, es una programacion que busca optimizar el numero de lineas, complejidad y velocidad de las cosas, un ejemplo es lo que llamo un arreglo de funciones, o tambien funciones flexibles, un programa normal que busca comandos dentro de un archivo podria verse asi:


#include < stdio.h >
#include < unistd.h >
int funcion1(char *linea) {
printf("orale entro a funcion1\n");
return 0;
}
int funcion2(char *linea) {
printf("entramos a funcion2 %s\n", linea);
return 0;
}
int main(int argc, char **argv) {
if(argc < 2) {
printf("Uso: %s < palabra >\n", argv[0]);
return -1;
}
printf("ahora mandamos ejecutar funcion1\n");
funcion1(argv[1]);
printf("ahora ejecutando funcion2\n");
funcion2(argv[1]);
printf("terminamos\n");
return 0;
}

la salida del archivo es la siguiente:

root@firebolt f00 # gcc -o normal normal.c
root@firebolt f00 # ./normal www.soldemorelia.com.mx

Ahora mandamos ejecutar funcion1
se mando www.soldemorelia.com.mx a funcion1
ahora ejecutando funcion2
se mando www.soldemorelia.com.mx a funcion2
terminamos
root@firebolt f00 #

Un programa que es flexible es el siguiente:

#include < stdio.h >
#include < unistd.h >
struct ejemplo {
int id;
char *nombre;
int (*execute)(char *linea);
};
int funcion1(char *linea) {
printf("se mando %s a funcion1\n", linea);
return 0;
}
int funcion2(char *linea) {
printf("se mando %s a funcion2\n", linea);
return 0;
}
struct ejemplo f[] = {{1, "funcion numero 1", funcion1},{2, "function numero 2", funcion2}, {0, NULL, NULL}};
int main(int argc, char **argv) {
int i = 0;
if(argc < 2) {
printf("Uso: %s < palabra >\n", argv[0]);
return -1;
}
printf("ahora mandamos ejecutar funcion1\n");
f[0].execute(argv[1]);
printf("ahora ejecutando funcion2\n");
f[1].execute(argv[1]);
printf("terminamos\n");
return 0;
}

El codigo es un poco mas largo pero si se quisiera agregar una funcion extra solo se tendria que agregar la funcion y una linea a a estructura, esto da la posibilidad de hacer funciones o cambiar funciones al vuelo y decir “si la palabra es asi has esto si no has lo otro” sin utilizar tanas lineas de codigo y mucho mas facil de leer y mantener.

Regresamos al codigo puro! La proxima semana veremos un programa que nos deja checar servidores y que utiliza ¡funciones flexibles!

Tags:   4 Comentarios

Dejar un comentario

4 respuestas hasta ahora ↓

  • 1 PaTa abr 19, 2008 at 11:42 am

    Muy buen articulo!!

  • 2 zodman may 18, 2008 at 12:39 am

    y yo habia visto todo en C esto es la neta :)

  • 3 nietzsche mar 11, 2009 at 11:17 pm

    function pointers

  • 4 juan perez mar 11, 2009 at 11:19 pm

    excelente!