Buenas, estoy haciendo un programa que haga el ls|more& osea que haga el comando ese pero en segundo plano o background. He estado mirando por la web y en otras web y lo unico que he encontrado es lo como hacer demonios en linux o algo asi....pero no consigo hacerlo.
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 -_--''