elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:57  


Tema destacado: Personaliza-Escoge el diseño del foro que más te guste.

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Procesos encadenados
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Procesos encadenados  (Leído 785 veces)
NewBe

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Procesos encadenados
« en: 10 Noviembre 2011, 16:06 »

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.



Citar
/* 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 y gracias


En línea
D4RIO


Desconectado Desconectado

Mensajes: 996


STOP CENSORSHIP


Ver Perfil WWW
Re: Procesos encadenados
« Respuesta #1 en: 11 Noviembre 2011, 14:59 »

¿Un novato en qué área? indagas en pipes y control de procesos, usando llamadas al sistema.

Yo me preguntaría si es necesario todo ese "dirty code", existiendo una forma limpia como popen (http://www.manpagez.com/man/3/popen/) para hacer exactamente lo mismo.

A demás, considera usar la etiqueta de código correcta para que veamos el resaltado de sintáxis, así es más fácil leer.

Saludos


En línea

RSA/RSA 4096 confiable x-hkp://keys.keysigning.org 789D025D<<back|track>> user
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Procesos XP
Windows
josuex 2 478 Último mensaje 13 Febrero 2005, 08:23
por Turambar
Procesos
Programación Visual Basic
Thaorius 2 520 Último mensaje 15 Julio 2005, 03:28
por Thaorius
Procesos
Seguridad
Jareth 2 405 Último mensaje 24 Junio 2006, 16:49
por Jareth
¡¡¡ver procesos!!!! « 1 2 »
Programación Visual Basic
zerofive 17 1,422 Último mensaje 8 Julio 2006, 21:29
por megateam
Listar procesos y realizar cosas con los procesos
Programación Visual Basic
sebas369 2 749 Último mensaje 14 Julio 2006, 16:08
por sebas369
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines