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
Si no me equivoco NC utiliza el argv[], es la forma comun de leer los parametros que se pasan de la linea de comandos.
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 !
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...
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.
Pero y si el usuario, en su normal torpeza que tenemos todos, no introduce algun de esos datos??
bueno muxas gracias, seguire pensando xD...
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.
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
Puedes hacer comprobaciones con argc para saber si faltan parámetros.
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!!!