Autor
|
Tema: Comandos de shell en C++ (Leído 5,392 veces)
|
ericksav22
Desconectado
Mensajes: 13
|
Hola a todos, necesito ayuda con un programa que quiero hacer en C++ y es mediante comandos de terminal (en linux) C++ debe ir al compilador gcc y compilar programas ("gcc programa.c") y si no regresa ningún error en la compilación debe ejecutarlos e ingresarles datos, por ejemplo si yo hago un programa en C que sume 2 cantidades #include <stdio.h> int main(int argc, char *argv[]) { int n1, n2; printf("Ingresa 2 numeros:"); scanf("%d%d",&n1,&n2); printf("La suma es: %d.\n",n1+n2); return 0; } entonces C++ mediante popen o alguna funcion parecida debe compilar y ejecutar ese programa y ademas debe ingresarle los datos para que se puedan sumar, espero ser explícito. Yo pude hacer que compile y ejecute el programa pero lo único que no supe es como ingresarle datos :/ Alguna idea?
|
|
|
En línea
|
|
|
|
dooque
Desconectado
Mensajes: 170
|
Hola! "Creo" que entiendo tu pregunta jajaja! El problema es que debiste ser un poco más específico ya que tengo preguntas sobre tu pregunta jaja. La que más me inquieta en este momento es : ¿Tu programa en C++ sabe a priori que datos debe ingresarle al programa compilado y ejecutado echo en C, o tiene que "deducirlo" de alguna manera? Salvando esa duda, lo que vos necesitas es manejar PIPEs (en castellano "tuberias"), que es una manera de comunicar procesos. Primero deberías leer algo de Comunicación Entre Procesos o IPC ( http://en.wikipedia.org/wiki/Inter-process_communication). Este es un link de como usar un pipe en C (en C++ es lo mismo): http://www.gnu.org/software/libc/manual/html_node/Creating-a-Pipe.htmlAdemás, si no estoy muy oxidado con este tema, creo que la función popen() ya te crea un pipe de lectura o escritura (según vos le indiques) al nuevo proceso, pasate por la página del manual de la función ( http://linux.die.net/man/3/popen) para estar más seguro. Trata de leer y escribir algo de código, si no te funciona pasate por acá así le echamos un ojo entre todos, dale? Suerte con eso! Saludos.
|
|
|
En línea
|
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Kernighan
|
|
|
ericksav22
Desconectado
Mensajes: 13
|
Hola! "Creo" que entiendo tu pregunta jajaja! El problema es que debiste ser un poco más específico ya que tengo preguntas sobre tu pregunta jaja. La que más me inquieta en este momento es : ¿Tu programa en C++ sabe a priori que datos debe ingresarle al programa compilado y ejecutado echo en C, o tiene que "deducirlo" de alguna manera? Salvando esa duda, lo que vos necesitas es manejar PIPEs (en castellano "tuberias"), que es una manera de comunicar procesos. Primero deberías leer algo de Comunicación Entre Procesos o IPC ( http://en.wikipedia.org/wiki/Inter-process_communication). Este es un link de como usar un pipe en C (en C++ es lo mismo): http://www.gnu.org/software/libc/manual/html_node/Creating-a-Pipe.htmlAdemás, si no estoy muy oxidado con este tema, creo que la función popen() ya te crea un pipe de lectura o escritura (según vos le indiques) al nuevo proceso, pasate por la página del manual de la función ( http://linux.die.net/man/3/popen) para estar más seguro. Trata de leer y escribir algo de código, si no te funciona pasate por acá así le echamos un ojo entre todos, dale? Suerte con eso! Saludos. Hola dooque, no las entradas ya deben de estar escritas, tal vez en algún archivo .in o no se pero ten por seguro que esas las escribe el usuario. Hablando de las pipes yo también llege a pensar que son lo que necesito y si he leido un poco de ellas aunque no les he entendido muy bien pero seguiré tratando, lo que me falta saber es cómo puedo ingresarle datos a un proceso ya creado, trataré de calar varios códigos y gracias por tu ayuda Saludos.
|
|
|
En línea
|
|
|
|
Puntoinfinito
Desconectado
Mensajes: 919
#! /win/archlinux
|
Pués con system("g++ programa.cpp -o programa"), luego si da error ya avisara la respuesta del comando. En caso que compile bien, lo abres desde comandos linux "./" o que escriba la dirección directamente.
Para inserir datos, justo despues de poner "./" o la dirección donde se encuentra "/home/user/programa", insertas los datos a inserir, si són dos pues; "./programa 3 4". En este caso sumara 3 y 4.
Esto no se puede considerar como una respuesta 100% valida. Pero si ha de ser para Linux, pues sirve perfectamente...
Saludos!
|
|
|
En línea
|
|
|
|
dooque
Desconectado
Mensajes: 170
|
No es un solución muy ortodoxa que digamos y tiene muchas limitaciones. Además si el programa toma los datos por la entrada estandar esta idea no funciona.
Saludos.
|
|
|
En línea
|
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. -- Kernighan
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
@puntoinfinito, para eso esta execX().
Lo que deberias hacer es crear una pipe(), hacer un fork(), un dup2() de la salida y la entrada estandar a las pipes, luego un execX() (execve(), execl()...) del gcc/g++ y analizar la salida del programa, que puedes obtener leyendo la pipe de entrada del proceso padre. Si encuentras el string "error" por ejemplo, pues lanzas un mensaje de error.
Y luego para ejecutarlo pues lo mismo, execX().
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
pasar comandos a la shell en Visual Basic .NET
.NET (C#, VB.NET, ASP)
|
zhynar_X
|
1
|
8,862
|
22 Febrero 2009, 23:33 pm
por bitarray
|
|
|
[AYUDA]Pasar comandos a una shell desde ruby
Scripting
|
Rust in Peace
|
0
|
2,217
|
26 Septiembre 2008, 22:23 pm
por Rust in Peace
|
|
|
Ayuda con programa y comandos en shell de linux
Java
|
turion
|
2
|
3,176
|
17 Agosto 2010, 00:39 am
por danielo-
|
|
|
shell execute c++ (comandos cmd como administrador en c++) ... DEV C++
Programación C/C++
|
fabian7593
|
1
|
5,312
|
22 Septiembre 2013, 02:18 am
por fabian7593
|
|