/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Procesos encadenados

 
      Índice del Foro elrincondelc.com -> Linux
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
NewBe



Registrado: 06 Oct 2011
Mensajes: 13

MensajePublicado: 10/11/2011 7:08 am
Título: Procesos encadenados

Hola,

Tengo una consulta sobre los procesos. La siguiente función debería de capturar el resultado de un " ls | grep " y mostrarlo en un string, pero se ve por pantalla
directamente.

Aunque soy novato en esto, veo que algo me falta, pero he hecho tantas pruebas que ya no se que puede ser.

Cita:
/* Implements numfiles request */
int do_numfiles (char *pattern)
{
int st1, st2;
int p[2];
t_string s, num0, num1;
int ret = 0;
t_string x;

/* mensaje de echo en green */
sprintf (s, "%s[%d] numfiles %s %s\n", color_green, getpid (), pattern,color_end);

if (write (1, s, strlen (s)) == -1)
return -1;

delay ();

/* cadenada con los parametros y el patterns
sprintf(t, "grep -c %s \n", pattern);*/

/* Se crea la pipe:*/
if (pipe(p) < 0) error("Creación de la pipe");

switch (fork())
{

case -1: error("Fork 1");

case 0: /* Hijo 1 – */
/* Redirecciona la salida hacia la pipe */

close(1); dup(p[1]);

/* Se cierran canales */

close(p[0]); close(p[1]);

/* Se ejecuta el código*/

execlp("ls", "ls", NULL);
error("Ejecución ls");

default:
break;
}

switch (fork())
{

case -1: error("Fork 2");
case 0: /* Hijo 2 */
/* Redirecciona entrada estàndard a la pipe */

close(0); dup(p[0]);

/* Cierra canales */

close(p[1]);close(p[0]);

/* Ejecuta grep */

execlp("grep", "grep","-c", pattern, (char *)0);
error("Ejecución grep");

default:
break;
}


read(p[1], num0, strlen(num0));
read(p[0], num1, strlen(num1));

/* Se cierran canales*/

close(p[0]); close(p[1]);


/*cadena con el resultado */
sprintf (s, "%s[%d] return code canal 0: %s canal 1: %s \n%s",
color_green, getpid (), num0, num1, color_end);

write(1, s, strlen(s));

/* Espera a los hijos */

wait(&st1);
wait(&st2);


/* Must return the number of exit */
exit(0);

}

_________________
Saludos
Volver arriba
_Leo_



Registrado: 20 Oct 2005
Mensajes: 379
Ubicación: Buenos Aires, Argentina

MensajePublicado: 27/11/2011 6:31 am
Título:

Creo que te va a resultar mucho más fácil ejecutar el ps con la función popen() que te devuelve un filedescriptor del que podés leer la salida del comando ejecutado.
Código:

FILE* f = popen("ps ...", "r");

Luego al leer f obtenés la salida estándar del proceso.


_________________
_Leo_
Daphne - administrador de tareas
Cine, tecnología, sociedad
Volver arriba
      Índice del Foro elrincondelc.com -> Linux
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com