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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Comandos de shell en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Comandos de shell en C++  (Leído 5,410 veces)
ericksav22

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Comandos de shell en C++
« en: 16 Enero 2013, 00:29 am »

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

Código:
#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 Desconectado

Mensajes: 170



Ver Perfil
Re: Comandos de shell en C++
« Respuesta #1 en: 16 Enero 2013, 02:52 am »

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.html

Ademá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 Desconectado

Mensajes: 13


Ver Perfil
Re: Comandos de shell en C++
« Respuesta #2 en: 16 Enero 2013, 09:03 am »

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.html

Ademá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 Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: Comandos de shell en C++
« Respuesta #3 en: 17 Enero 2013, 12:17 pm »

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

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
dooque

Desconectado Desconectado

Mensajes: 170



Ver Perfil
Re: Comandos de shell en C++
« Respuesta #4 en: 17 Enero 2013, 14:50 pm »

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 Desconectado

Mensajes: 1.077



Ver Perfil
Re: Comandos de shell en C++
« Respuesta #5 en: 17 Enero 2013, 15:49 pm »

@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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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,875 Último mensaje 22 Febrero 2009, 23:33 pm
por bitarray
[AYUDA]Pasar comandos a una shell desde ruby
Scripting
Rust in Peace 0 2,221 Último mensaje 26 Septiembre 2008, 22:23 pm
por Rust in Peace
Ayuda con programa y comandos en shell de linux
Java
turion 2 3,180 Último mensaje 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,328 Último mensaje 22 Septiembre 2013, 02:18 am
por fabian7593
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines