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
int main()
{
return 20;
}
Segundo programa:
dos.cpp -> g++ -o dos.out dos.cpp
#include <iostream>
#include <cstdlib>
int main() {
int resultado = system("./uno.out");
std::cout << resultado;
return 0;
}
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.
#include <iostream>
using namespace std;
int main(int argc, char** args){
if(argc>1)
return 666;
system("pause");
cout << system("a.exe a") << endl;
system("pause");
}
En Windows, funciona correctamente. Tal vez sea coisa de Linux.
Edito: Echa una ojeada a http://linux.die.net/man/3/system (http://linux.die.net/man/3/system).
#include <iostream>
#include <cstdlib>
#include <fstream>
int main() {
system("./uno.out >a.txt");
ifstream f ("a.txt");
string s;
getline(f,s);
const char * c = s.c_str();
int resultado = atoi(c);
std::cout << resultado;
return 0;
}
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.
Correcto:
con esto de aquí, se redirige el flujo de salida (por terminal), hacía a.txt
system("./uno.out >a.txt");
Una opción un poco chapucera sería:
#include <iostream>
int main()
{
std::cout << 20;
}
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
int main() {
ifstream f ("a.txt");
system("./uno.out > a.txt");
string s;
getline(f,s);
const char * c = s.c_str();
int resultado = atoi(c);
cout << resultado;
return 0;
}
http://stackoverflow.com/questions/14222172/detecting-meaning-of-system-functions-return-value-in-linux (http://stackoverflow.com/questions/14222172/detecting-meaning-of-system-functions-return-value-in-linux)
Busca por ahí.
EDITO: Tras probar en Linux...
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char** args){
if(argc>1)
return 200;
cin.get();
int ret = system("./a.exe a");
cout << WEXITSTATUS(ret) << endl;
cin.get();
}
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.
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