Escribir en la entrada de datos de un programa desde c

Iniciado por 4dr14n31t0r, 17 Noviembre 2016, 23:50 PM

0 Miembros y 1 Visitante están viendo este tema.

4dr14n31t0r

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?

engel lex

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

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?

Drewermerc

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.



#include <stdio.h>
#include <stdlib.h>

FILE *abrir(char *nombre);

int main(void){
   char *c1 = "Este es  un texto de prueba para poder";
   char *c2 = "probar el manejo de entrada y salida de grep";
   char *query = "select * from prueba;";
   FILE *file, *tmpFile;
   
   file = abrir("prueba.txt");
   tmpFile = abrir("tmp.txt");
   
   fprintf(tmpFile, "%s\n", "use test");
   fprintf(tmpFile, "%s", query);

   fclose(file);
   fclose(tmpFile);
   system("mysql < tmp.txt");
   system("rm tmp.txt");

   tmpFile = abrir("tmp.txt");
   file = abrir("prueba.txt");
   
   fprintf(file, "%s\n", c1);
   fprintf(file, "%s", c2);
   
   fclose(file);
   fclose(tmpFile);
   
   system("cat prueba.txt | grep texto >> tmp.txt");
   system("cat tmp.txt");
   
   system("rm tmp.txt");

   getchar();
   
   return EXIT_SUCCESS;
}

FILE *abrir(char *nombre){
   FILE *file;
   if(!(file = fopen(nombre, "wa"))){
       perror("Archivo no creado");
       exit(-1);
   }



Saludos,
Drewermerc.