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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Escribir en la entrada de datos de un programa desde c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Escribir en la entrada de datos de un programa desde c  (Leído 2,513 veces)
4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Escribir en la entrada de datos de un programa desde c
« en: 17 Noviembre 2016, 23:50 pm »

Imaginense que por ejemplo tengo en C una variable de tipo string que contiene la sentencia que hay que ejecutar para hacer una consulta en mysql, y quiero enviar ese string al standard input del mysql para ejecutar el script. O imaginense que tengo un string bastante largo con muchas lineas y quiero usar el programa grep para encontrar un trozo de texto del mismo. Solo pongo estos como ejemplos para que entiendan lo que realmente quiero. ¿Podrian decirme como se puede hacer? ¿Que metodos hay que usar y como y de que librerias, etc?


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Escribir en la entrada de datos de un programa desde c
« Respuesta #1 en: 18 Noviembre 2016, 01:22 am »

puedes usar system para llamar a la consola

http://www.cplusplus.com/reference/cstdlib/system/

los comandos que pongas allí pueden no ser portables entre diferentes OS ... así que cuando compiles de win para lin o osx cuidado


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Escribir en la entrada de datos de un programa desde c
« Respuesta #2 en: 19 Noviembre 2016, 22:59 pm »

Eso ya lo sabia, pero no me referia a eso.
En Java, cuando ejecutas un comando usando Runtime.getRuntime.exec, puedes obtener el bufferedInput/Output Stream para pillar la salida del comando y para enviar datos a la entrada del mismo. Mi pregunta es ¿Hay alguna forma de hacer lo mismo en C?
En línea

Drewermerc

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: Escribir en la entrada de datos de un programa desde c
« Respuesta #3 en: 20 Noviembre 2016, 01:39 am »

Hola 4dr14n31t0r.
puedes usar system como ya te lo menciono engel lex, con el manejo de ficheros y un poco de batch, creo que puedes lograr lo que quieres.
Hice un pequeño ejemplo rapido sobre lo que planteaste en los ejemplos, espero que te sirva.

Si quieres tener mañor control puedes usar pipe() y fork() de posix que te da mayor control en el flujo de las entrada y salidas, la libreria que se usa es unistd.h.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. FILE *abrir(char *nombre);
  5.  
  6. int main(void){
  7.    char *c1 = "Este es  un texto de prueba para poder";
  8.    char *c2 = "probar el manejo de entrada y salida de grep";
  9.    char *query = "select * from prueba;";
  10.    FILE *file, *tmpFile;
  11.  
  12.    file = abrir("prueba.txt");
  13.    tmpFile = abrir("tmp.txt");
  14.  
  15.    fprintf(tmpFile, "%s\n", "use test");
  16.    fprintf(tmpFile, "%s", query);
  17.  
  18.    fclose(file);
  19.    fclose(tmpFile);
  20.    system("mysql < tmp.txt");
  21.    system("rm tmp.txt");
  22.  
  23.    tmpFile = abrir("tmp.txt");
  24.    file = abrir("prueba.txt");
  25.  
  26.    fprintf(file, "%s\n", c1);
  27.    fprintf(file, "%s", c2);
  28.  
  29.    fclose(file);
  30.    fclose(tmpFile);
  31.  
  32.    system("cat prueba.txt | grep texto >> tmp.txt");
  33.    system("cat tmp.txt");
  34.  
  35.    system("rm tmp.txt");
  36.  
  37.    getchar();
  38.  
  39.    return EXIT_SUCCESS;
  40. }
  41.  
  42. FILE *abrir(char *nombre){
  43.    FILE *file;
  44.    if(!(file = fopen(nombre, "wa"))){
  45.        perror("Archivo no creado");
  46.        exit(-1);
  47.    }
  48.  
  49.  

Saludos,
Drewermerc.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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