Foros Linux Argentina
Febrero 07, 2012, 07:44:03 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: help!!! comunicacion entre dos programas C++  (Leído 5199 veces)
jpjimenez
Visitante


Email
« : Julio 10, 2007, 01:06:49 »

hola, tengo una terrible duda que no me deja dormir durante hace ya unas semanas, entre otras cosas porque es de vital importancia para la realizacion de un proyecto en el que estoy enfrascado y por que en si la duda no me deja tranquilo.
Por favor cualquier ayuda la agradecer?a enormemente.

La cuestion es la siguiente:

tengo un programa en C++ que lo que hace es simplemente imprimir a travez del flujo de error un mensaje, este es el c?digo


/*c?digo del ejecutable ejemplo.bin*/

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

using namespace std;

int main(int argc, char* argv[]){
      
      fprintf(stderr,"Este es el mensaje de error");
      
      return EXIT_SUCCESS;
}


Sencillo verdad.
Ahora viene la cuestion:

?C?mo puedo llamar a este programa desde otro en C++ y capturar en alguna variable, o de alguna forma, el mensaje lanzado desde el programa "ejemplo.bin"?

Yo trabajo en Linux.

Por favor cualquier ayuda. Si podrian ilustrar con codigo de ejemplo seria ideal, he tratado de much?simas maneras y nada. Gracias.
En línea
gordus
Visitante


Email
« Respuesta #1 : Julio 11, 2007, 04:51:10 »

Investiga sobre la funcion execve
http://www.linuxinfor.com/spanish/man2/execve.html

o alguna de sus hermanas exec
http://es.tldp.org/Paginas-manual/man-pages-es-1.28/man3/exec.3.html
En línea
jpjimenez
Visitante


Email
« Respuesta #2 : Julio 11, 2007, 09:48:31 »

Gracias, mano, creeme que tratado de varias maneras, he investigado sobre las funciones fork(),exec(),pipe()
y todavia no se como capturar la salida por el flujo de error en una variable desde mi otro programa

Lo m?s que he podido hacer es redireccionar la salida de stderr a un fichero en disco con la funcion

freopen(char* nameFile, char* modo, FILE* stream);

con eso ya es algo, pero por cuestiones de rapidez necesitaria capturarla en una variable, es decir
llamar al otro programa y en vez de cargar del fichero en el disco la salida del otro programa capturarla desde adentro como FILE* o otro cosa.

Gracias.

de todas maneras voy a colocar un ejemplito de lo que he podido hacer hasta el momento ( todavia no estoy satisfecho ) pero bueno quiza a alguien puede servirle (disculpen la falta de tildes), cualquier ayuda todavia me es util. Aqui va:


Esto es una forma muy simple de hacerlo aunque existen otras con las funciones fork(), pipe(), exec(), etc...

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

using namespace std;

int main(int argc, char* argv[]){
   FILE* file = 0;
  
   //redirecciono el stream de error a un fichero
   freopen("output.txt","w",stderr);
   //ejecuto el otro programa creando una tuberia
   file = popen("/usr/local/bin/swfmill","r");
   //cierro tuberia
   pclose(file);
   //cierro la salida del stream
   fclose(stderr);

    return EXIT_SUCCESS;
 }

Con esto ya ejecutamos el otro proceso y escribimos en el fichero output.txt la salida del flujo de error


Chao, aun no resuelvo con esto, necesito capturar el stream desde mi aplicacion cualquier ayuda por favor. Gracias.

En línea
gordus
Visitante


Email
« Respuesta #3 : Julio 14, 2007, 07:13:43 »

Hola de nuevo
La idea de utilizar un fichero temporal es bastante buena siempre y cuando trabajes correctamente con el.
En este manual http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html aparece el siguiente ejemplo que trabaja de la misma forma que el tuyo.

#include <stdio.h>>
main()
{
   FILE *fpipe;
   char *command="ls -l";
   char line[256];

   if ( !(fpipe = (FILE*)popen(command,"r")) )
   {  // If fpipe is NULL
      perror("Problems with pipe");
      exit(1);
   }

   while ( fgets( line, sizeof line, fpipe))
   {
     printf("%s", line);
   }
   pclose(fpipe);
}
En línea
Foros Linux Argentina
   

 En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.13 | SMF © 2006-2011, Simple Machines LLC
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!