Duda sobre la consola y entrada de datos.

Iniciado por vangodp, 13 Febrero 2014, 19:12 PM

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

vangodp

Buenas compañeros.
Una pregunta sobre la consola.
Imagine que entro con un comando cualquier como ipconfig /all...
Lógicamente va a devolverme todo los numerillos de la red  :xD
Hay alguna forma de leer esos datos para hacer con ellos algo interesante como guardarlos o lo que sea?
Ya se que esta el comando netsh y otros para ip pero repito, la cuestión es: ¿Puedo leer esos datos?  :huh:
O otra cosa que pienso es si se puede leer esto y pasarlo a modo gráfico con alguna libreria como sdl(cosas mias vamosXD). :3
¡Gracias y saludo a los foreros! ;-)

PD: Uso XP por si necesitan saber, pero me vale también para 7 linux o lo que sea.
Lo que quiero es pillar la punta del hilo que no se por donde meter mano.
Cuando pongo leer datos por la consola me sale siempre leer desde teclado o me da cosas como el uso de int argc, char *argv[]. No se si es la única forma de hacer.
Si saben alguna pagina para poder entenderlo para dumies.

Vaagish

CitarHay alguna forma de leer esos datos para hacer con ellos algo interesante como guardarlos o lo que sea?

Si escribis este comando ipconfig >> Resultado.txt te va a guardar en un archivo de texto el resultado de ipconfig

CitarO otra cosa que pienso es si se puede leer esto y pasarlo a modo gráfico con alguna libreria como sdl

No conozco de esa librería,, peero.. si guardas la información en un archivo lo podes leer y supongo poner esos datos en un programa..

Saludos!

vangodp

Es una forma.
La forma que comentas también sirve, no esta mal.
A ver si alguien sabe como hacer sin pasarlo a archivo.
Caso contrario sera la única solución.
Creo que no se puede, pero quien sabe. :D
Gracias vaagish.  ;-)

vangodp

joe.. para linux encontré eso en bash, es lo mismo, pero necesito para cpp XD

var=$(comando)

Nota: esta sintaxis es preferible a la antigua que utiliza estos caracteres: (`comando`)
Ejemplos

    Guardar de la salida estándar:
        únicamente stdout
            var=$(comando)
        stdout y stderr
            var=$(comando 2>&1)
        Guardar el código de retorno ($?)
            únicamente código de retorno
                comando
                var=$?
            Los dos
                var=$(comando)
                var=$?

:rolleyes:

Yugget

A lo de guardar a que te refieres... guardarlo en el tiempo de ejecución del programa o guardarlo para siempre...

Osea si es por un momento que se ejecute ese comando, ¿no lo podrías almacenar en una variable?.

Y si es para siempre por así decirlo, ¿no podrías guardarlo en una base de datos?.

Saludos.  ;)

vangodp

#5
Cita de: TomasinSG en 13 Febrero 2014, 21:48 PM
¿no lo podrías almacenar en una variable?.

En una variable me refiero, un tipo string o algo.
Y no me refiero solo al caso de la ip.
Hay muchos comandos que retornan datos al que me interesaría guardar en un string o en una variable de otros tipos.  :¬¬
Por ejemplo:
En Delphi creo, hay una función según he leído que te ejecuta el comando y lo guarda el resultado en un string.
ExecuteDOSCommand(CommandLine:string)

No se como funciona exactamente por que no entiendo un pimiento de dhelphi XD, pero me parece la caña si se pudiera hacer eso en cpp. :rolleyes:

Vaagish

#6
Creo que acá esta la solución.. (la búsqueda de google me mando al foro)  ;-)

http://foro.elhacker.net/programacion_cc/almacenar_salida_del_comando_system_en_una_variable-t80037.0.html

Suerte! Saludos! De nada!  ;D

PD: No lo lei,, pero me parece que dieron con la tecla ahi!

EDITO:Ahora si lo lei,, funciona ferpecto!

Código (cpp) [Seleccionar]
#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
FILE *PIPE;
PIPE = _popen("ipconfig","r");

char buf[128];

while(!feof(PIPE))
{
fgets (buf, 128, PIPE);
printf(buf);
}

_pclose(PIPE);

cin.get();
return 0;
}

vangodp

#7
Me funciono este :D
Pinta muy bien.
Voy a buscar mas información a ver como es su funcionamiento.
Al parecer abre un proceso o algo por el estilo, aun no lo tengo muy claro.

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {
FILE *in;
char buff[200];

if ( ! ( in = popen ( "ipconfig", "r" ) ) ) {
return 1;
}

while ( fgets ( buff, sizeof ( buff ), in ) != NULL ) {
cout << buff;
}

pclose ( in );

return 0;
}


http://www.sw-at.com/blog/2011/03/23/popen-execute-shell-command-from-cc/De aqui lo saque.
No creo que encontremos nada mejor :D
Gracias vaagish, eres un fiera  ;-)

version en cpp:
Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>

using namespace std;

int main() {
FILE *in;
char buff[512];

if(!(in = popen("ls -sail", "r"))){
return 1;
}

while(fgets(buff, sizeof(buff), in)!=NULL){
cout << buff;
}
pclose(in);

return 0;
}


Vaagish

De nada,, a veces encuentro cosas,, a veces... jeje