Duda rápida sobre programación en C: system()

Buenas, tenía una duda sobre la función system() de C. ¿Es posible recolectar las cadenas de datos que devuelve la consola?
Puedes explicarte un poco mejor?
thanatos_xbox escribió:Puedes explicarte un poco mejor?

Yo lo veo bastante clarito, otra cosa es que sepa responderle.
thanatos_xbox escribió:Puedes explicarte un poco mejor?

La función system() sirve para ejecutar comandos en la consola del sistema operativo a usar. Esta cuando se ha realizado devuelve un valor superior a 0 si se ha ejecutado correctamente la función. Yo lo que quiero es capturar los datos mostrados en consola para luego tratarlos.
No se puede hacer directamente pero hay un truquito para ello

haces un system("lo que sea >> fichero.txt " );

Habres el fichero y lo lees normalmente, imagino que para esto no necesitas ayuda.

Listo. Alguna duda más¿?
Aunque no sea portable, si utilizas Linux lo suyo es hacerte un proceso hijo, una pipe y redirigir la salida estandar del proceso hijo a la pipe (y leer de la pipe, una vez muera el hijo y mientras tanto, eso ya como quieras...).

EDIT: anda, acabo de descubrir popen, que es lo que te decía yo pero con un par de lineas, que chulo.
Aracem escribió:No se puede hacer directamente pero hay un truquito para ello

haces un system("lo que sea >> fichero.txt " );

Habres el fichero y lo lees normalmente, imagino que para esto no necesitas ayuda.

Listo. Alguna duda más¿?

Joder que truquito más tonto pero más útil. Me doy de cabeza contra la pared por no habérseme ocurrido en su momento, que sufrí de lo lindo para ciertas cosas y eso me habría ayudado MUCHO.
Yo no se como lo haceis ustedes, yo uso por ejemplo

FILE fichero*

fichero=fopen("datos.txt","w");

almacenas los datos y listo
Aracem escribió:No se puede hacer directamente pero hay un truquito para ello

haces un system("lo que sea >> fichero.txt " );

Habres el fichero y lo lees normalmente, imagino que para esto no necesitas ayuda.

Listo. Alguna duda más¿?

¡Gracias! Yo rompiéndome la cabeza para nada [carcajad]
thanatos_xbox escribió:Yo no se como lo haceis ustedes, yo uso por ejemplo

FILE fichero*

fichero=fopen("datos.txt","w");

almacenas los datos y listo


¿Y esto que tiene que ver con lo que está preguntando?
Repito lo que intentado decir, en la cabecera de mi contestacion he dicho que nose como lo haceis ustedes, pero la programacion que yo he dado para abrir un fichero y tal se ahce de esa manera y luego recoger la cadena de caracteres de la forma normal.
thanatos_xbox escribió:Repito lo que intentado decir, en la cabecera de mi contestacion he dicho que nose como lo haceis ustedes, pero la programacion que yo he dado para abrir un fichero y tal se ahce de esa manera y luego recoger la cadena de caracteres de la forma normal.

¿Y quién ha pedido cómo abrir un fichero?
abrir un fichero.txt para almacenar los datos
thanatos_xbox escribió:Repito lo que intentado decir, en la cabecera de mi contestacion he dicho que nose como lo haceis ustedes, pero la programacion que yo he dado para abrir un fichero y tal se ahce de esa manera y luego recoger la cadena de caracteres de la forma normal.

Pero es que la duda del primer post es como obtener las cadenas de la salida estándar


En cuanto a la duda, también puedes redirigir el fichero estándar stdout a un fichero y obtienes lo mismo. Eso sí, creo que si lo rediriges no saldrán por pantalla (no lo recuerdo ya)
Como dice jarcoval se puede redirigir stdout a un fichero en el propio programa creo que haciendo un simple
stdout = fichero;

pero no estoy muy seguro. No, no saldría por pantalla y tendría el problema añadido de que no se podría mostrar nada por pantalla en toda la ejecución, por eso yo usaba el truquito del >>fichero que básicamente es lo mismo pero sólo para esa ejecución.

Y para jhony, sí, es un truquito de puta madre jejeje También tuve que pegarme en algún momento con una tontería así y alguien me lo enseñó. La cantidad de pijotadas que se pueden hacer programando :P
También me mola la de los printfs para debuguear de forma cool jejeje que es creando una constante debug y cuando queramos poner el típico printf para debuguear ponemos

#ifdef DEBUG //o #ifndef como se prefiera
printf ....
#endif

Pero vamos, que esto si que es una pijada xD
Aracem escribió:Como dice jarcoval se puede redirigir stdout a un fichero en el propio programa creo que haciendo un simple
stdout = fichero;


Supongo que más bien sería fichero<<stdout
Pues creo recordar que era con = (estoy hablando de igualarlo en el propio código) pero la verdad es que no lo recuerdo porque creo que lo he hecho una vez en mi vida y con el stdin.
16 respuestas