!!! Help Linea de comandos diferentes opciones !!!

Iniciado por Garfield07, 20 Noviembre 2010, 13:30 PM

0 Miembros y 1 Visitante están viendo este tema.

Garfield07

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


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

[L]ord [R]NA

Si no me equivoco NC utiliza el argv[], es la forma comun de leer los parametros que se pasan de la linea de comandos.

xassiz~

Les los argumentos

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


y compruebas con strcmp por ejemplo:

if(strcmp(argv[1], "-d") != 0)
    //hacer X cosa
else if()
    //hacer X cosa
else
    //mostrar ayuda


Saludos !

Garfield07

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...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

piou

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.

Garfield07

Pero y si el usuario, en su normal torpeza que tenemos todos, no introduce algun de esos datos??
bueno muxas gracias, seguire pensando xD...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

Akai

por aportar una idea:

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.


piou

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


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

xassiz~

Puedes hacer comprobaciones con argc para saber si faltan parámetros.

Garfield07

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:

if (argc < 3 || argc > 4) help ();
if (strcmp (argv [1], "XXXXX")==0)  ------- (atoi (argv [2]));
if (strcmp (argv [1], "XXXXX")==0 && argv [2] != NULL && argv [3] != NULL)  ------- (argv [2], atoi (argv [3]));
if (strcmp (argv [1], "XXXXX")==0) ------- (argv [2]);
return 0;

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!!!


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo