Autor
|
Tema: !!! Help Linea de comandos diferentes opciones !!! (Leído 3,257 veces)
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
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
|
|
|
En línea
|
* 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
Desconectado
Mensajes: 1.513
El Dictador y Verdugo de H-Sec
|
Si no me equivoco NC utiliza el argv[], es la forma comun de leer los parametros que se pasan de la linea de comandos.
|
|
|
En línea
|
|
|
|
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 !
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
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...
|
|
|
En línea
|
* 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
Desconectado
Mensajes: 25
|
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.
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
Pero y si el usuario, en su normal torpeza que tenemos todos, no introduce algun de esos datos?? bueno muxas gracias, seguire pensando xD...
|
|
|
En línea
|
* 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
Desconectado
Mensajes: 823
|
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.
|
|
|
En línea
|
|
|
|
piou
Desconectado
Mensajes: 25
|
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
|
|
|
En línea
|
|
|
|
xassiz~
|
Puedes hacer comprobaciones con argc para saber si faltan parámetros.
|
|
|
En línea
|
|
|
|
Garfield07
Desconectado
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
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!!!
|
|
|
En línea
|
* 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
|
|
|
|
|