elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda: Programa devolviendo valor a otro programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda: Programa devolviendo valor a otro programa  (Leído 3,946 veces)
erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Duda: Programa devolviendo valor a otro programa
« en: 2 Julio 2015, 19:17 pm »

Hola, me he puesto a probar en crear un programa recibiendo valor de otro programa, este es el pequeño ejemplo:

Primer programa:
uno.cpp -> g++ -o uno.out uno.cpp
Código
  1. int main()
  2. {
  3.    return 20;
  4. }
  5.  

Segundo programa:
dos.cpp -> g++ -o dos.out dos.cpp
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. int main() {
  5.    int resultado = system("./uno.out");
  6.    std::cout << resultado;
  7.  
  8.    return 0;
  9. }
  10.  

En este caso, cuando ejecuto dos.out mi salida es de 5120 (no se que resultado les arroje a uds), y si coloco otro valor de retorno en uno.cpp, devuelve un valor distinto. ¿Alguien me puede explicar?

Gracias.


En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda: Programa devolviendo valor a otro programa
« Respuesta #1 en: 2 Julio 2015, 19:30 pm »

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(int argc, char** args){
  6.    if(argc>1)
  7.        return 666;
  8.    system("pause");
  9.    cout << system("a.exe a") << endl;
  10.    system("pause");
  11. }

En Windows, funciona correctamente. Tal vez sea coisa de Linux.

Edito: Echa una ojeada a http://linux.die.net/man/3/system.


« Última modificación: 2 Julio 2015, 19:34 pm por ivancea96 » En línea

user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: Duda: Programa devolviendo valor a otro programa
« Respuesta #2 en: 2 Julio 2015, 19:39 pm »

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4.  
  5. int main() {
  6.  
  7.    system("./uno.out >a.txt");
  8.    ifstream f ("a.txt");
  9.    string s;
  10.    getline(f,s);
  11.    const char * c = s.c_str();
  12.    int resultado = atoi(c);
  13.    std::cout << resultado;
  14.  
  15.    return 0;
  16. }
  17.  
En línea

erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Duda: Programa devolviendo valor a otro programa
« Respuesta #3 en: 2 Julio 2015, 21:26 pm »

Quizas sea el linux, estoy usando ubuntu 14.04 LTS, el codigo de ivancea igualmente me arroja numero distinto al que supuestamente deberia retornar en el codigo, y el es user-marcos  arroja 0, incluso pasando std::ifstream::in en el constructor.
En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: Duda: Programa devolviendo valor a otro programa
« Respuesta #4 en: 2 Julio 2015, 21:52 pm »

Correcto:
con esto de aquí, se redirige el flujo de salida (por terminal), hacía a.txt
Código
  1. system("./uno.out >a.txt");
  2.  

Una opción un poco chapucera sería:
Código
  1. #include <iostream>
  2. int main()
  3. {
  4. std::cout << 20;
  5. }
  6.  

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4. using namespace std;
  5. int main() {
  6.  
  7.    ifstream f ("a.txt");
  8.    system("./uno.out > a.txt");    
  9.    string s;
  10.    getline(f,s);
  11.    const char * c = s.c_str();
  12.    int resultado = atoi(c);
  13.    cout << resultado;
  14.    return 0;
  15. }
  16.  
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Duda: Programa devolviendo valor a otro programa
« Respuesta #5 en: 2 Julio 2015, 22:06 pm »

http://stackoverflow.com/questions/14222172/detecting-meaning-of-system-functions-return-value-in-linux

Busca por ahí.

EDITO: Tras probar en Linux...

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char** args){
  7.    if(argc>1)
  8.        return 200;
  9.    cin.get();
  10.    int ret = system("./a.exe a");
  11.    cout << WEXITSTATUS(ret) << endl;
  12.    cin.get();
  13. }

WEXITSTATUS es un macro que recoge el estado del programa. El límite es de 0 a 255 incluído.

Hay otros macros que recogen otras posibilidades, y los puedes ver en el link que puse en el segundo mensaje.
« Última modificación: 2 Julio 2015, 22:23 pm por ivancea96 » En línea

erest0r

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Duda: Programa devolviendo valor a otro programa
« Respuesta #6 en: 3 Julio 2015, 01:38 am »

Gracias a ambos por la ayuda, el WEXITSTATUS si me sirvio. Buscando como referencia ese macro encontre este link con otros macros por si alguna otra persona esta interesada tambien: http://www.gnu.org/software/libc/manual/html_node/Process-Completion-Status.html
En línea

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines