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");
tmpFile = abrir("tmp.txt");
file = abrir("prueba.txt");
system("cat prueba.txt | grep texto >> tmp.txt");
return EXIT_SUCCESS;
}
FILE *abrir(char *nombre){
FILE *file;
if(!(file
= fopen(nombre
, "wa"))){ }
Saludos,
Drewermerc.