Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Garfield07 en 20 Noviembre 2010, 13:30 pm



Título: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: Garfield07 en 20 Noviembre 2010, 13:30 pm
Buenas, me ha surgido una duda bien sencilla, pero que no se resolver. Quiero decir:
Como hago para que mi programa haga diferentes cosas segun la linea de comandos. No me refiero al tipico argv [], sino a hacer un programa como un mini-NC en el que tu le indiques si quieres conectar,  abrir puertos, etc. La magia de este programa es la gran cantidad de opciones que da, fruto de un gran trabajo sin duda. Lo que quiero decir que el programa sepa identificar:
kc -l -p 31337
como
kc -v 192.168.1.1 -p 80
como
kc 192.168.1.1 -d
como infinitas posibilidades mas.

Si se dan cuenta estan en distintas posibilidades, el problema es que son infinitas...
Leyendo el code de NC te das cuenta de que todo esta organizado con flags y switches, pero como puedo hacerlo + sencillamente???

Si no me entienden pregunten, pues tengo mucho interes....
Gracias


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: [L]ord [R]NA en 20 Noviembre 2010, 13:37 pm
Si no me equivoco NC utiliza el argv[], es la forma comun de leer los parametros que se pasan de la linea de comandos.


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: xassiz~ en 20 Noviembre 2010, 15:37 pm
Les los argumentos
Código
  1. int main(int argc, char *argv[])
  2.  

y compruebas con strcmp por ejemplo:
Código
  1. if(strcmp(argv[1], "-d") != 0)
  2.    //hacer X cosa
  3. else if()
  4.    //hacer X cosa
  5. else
  6.    //mostrar ayuda
  7.  

Saludos !


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: Garfield07 en 20 Noviembre 2010, 18:29 pm
Bueno, casi. Lo que digo es como lo hace NC para que al ejecutar con tales parametros haga tales cosas. Ah pos con strcmp...
Pues no. NC usa tantas opciones que esa forma seria interminable... Como lo hace???

Aparte, muchas gracias por su pronta respuesta...


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: piou en 20 Noviembre 2010, 19:07 pm
Vale que la manera de colocarlos sea interminable, pero supongamos que tienes los parámetros -a, -b, -c y -d, y que cada uno debe llevar algún dato detrás.
Pues simplemente debes recorrer argv y cada vez que veas uno de esos cuatro coger el siguiente y meterlo en una variable, ya lo tienes guardadito para cuando lo necesites.
Con recorrer argv una vez ya tendrías todos los argumentos.


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: Garfield07 en 20 Noviembre 2010, 19:32 pm
Pero y si el usuario, en su normal torpeza que tenemos todos, no introduce algun de esos datos??
bueno muxas gracias, seguire pensando xD...


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: Akai en 20 Noviembre 2010, 19:45 pm
por aportar una idea:

Código:
para i=0;i<argc;i++
si(argv[i]=="opcion x")
entonces activa x

si(argv[i]=="opcion y")
entonces activa y

si(argv[i]=="opcion z")
entonces activa z
...
fin para
y después continua con su ejecución según los parámetros indicados o con unos por defecto si estos no se han indicado.



Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: piou en 20 Noviembre 2010, 20:21 pm
Si el usuario en su infinito torpeza no incluye alguno, pues simplemente no llenarás ese dato, te dejo un pseudocódigo.
Si suponemos que el programa se inicia
./programa -a valor1 -b valor2 -n valorN

Código:
for (i=1;i< numerodeargumentos; i++)
{
       si argv[i] es el argumento1
                configuracion1 = argv[i+1]
       sino si argv[i] es argumento2
                configuracion2 = argv[i+1]
       sino si argv[i] es argumentoN
               configuracionN = argv[i+1]
}

//Ya tenemos todas las configuraciones
Otro bucle que pase por las configuraciones, si alguna no tiene valor o alguna es erronea, se avisa al usuario que no lo ha introducido

Espero ser de ayuda


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: xassiz~ en 20 Noviembre 2010, 20:30 pm
Puedes hacer comprobaciones con argc para saber si faltan parámetros.


Título: Re: !!! Help Linea de comandos diferentes opciones !!!
Publicado por: Garfield07 en 20 Noviembre 2010, 21:33 pm
Buenas, ya he conseguido hacerlo correr bien xD... La historia era que voy a presentar una "navaja americana" con menos usos que NC para el concurso. El code lo tenia ya hecho en tres archivos diferentes: hK1, hKK2 y hK3.
Tras un rato cambiando cosas hice:
Código
  1. if (argc < 3 || argc > 4) help ();
  2. if (strcmp (argv [1], "XXXXX")==0)  ------- (atoi (argv [2]));
  3. if (strcmp (argv [1], "XXXXX")==0 && argv [2] != NULL && argv [3] != NULL)  ------- (argv [2], atoi (argv [3]));
  4. if (strcmp (argv [1], "XXXXX")==0) ------- (argv [2]);
  5. return 0;
  6.  
De todos modos muchas gracias por sus respuestas, deberia haberlas leido antes, pero asi servira a otros usuarios XD...
Perdonad que tache todo, lo cambiare el 23!!!

Muchisimas gracias de todos modos!!!