De momento tengo el codigo para hacer el comando ls| more, pero no consigo hacerlo en segundo plano... Pego el codigo y a ver si alguien me puede hechar un cable.
Código C:
Ver original
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <fcntl.h> #include <errno.h> #include <errno.h> void error(char *m) { /* Escribe los errores por el canal estándar de errores (2) */ write(2, "\n", 1); } main() { int p[2]; int st1, st2; /* Se crea una pipe y se reciben los dos canales: */ /* el de lectura y el de escritura (p[0] y p[1]) */ if (pipe(p) < 0) error("Creación pipe"); switch (fork()) { case -1: error("Fork 1"); case 0: /* Hijo 1 - Redirecciona, cierra y ejecuta */ /* Redirecciona salida estándar hacia la pipe */ close(1); dup(p[1]); /* Cierra los canales de la pipe que no utiliza */ close(p[0]); close(p[1]); /* Carga el código de ls con dos parámetreos */ execlp("ls","ls", (char *)0); error("Ejecución ls "); default: /* Proceso padre */ break; } switch (fork()) { case -1: error("Fork 2"); case 0: /* Hijo 2 - Redirecciona, cierra y ejecuta */ /* Redirecciona entrada estándar hacia la pipe */ close(0); dup(p[0]); /* Cierra los canales de la pipe que no utiliza */ close(p[0]); close(p[1]); /* Carga el código de grep con un parámetro */ execlp("more", "more", (char *)0); error("Ejecución grep"); default: /* Proceso padre */ break; } /* El padre cierra los canales que no utiliza */ close(p[0]); close(p[1]); /* Espera que acaben los dos hijos */ wait(&st1); wait(&st2); /* Finaliza su ejecución */ }
lo podeis probar...funciona perfectamente.....ahora solo falta que funcione en segundo plano -_--''