elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  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 2,680 veces)
NewBe

Desconectado Desconectado

Mensajes: 11


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

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: 1.004


U N I X


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

¿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

OpenBSDFreeBSD
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Procesos
Programación Visual Basic
Thaorius 2 2,325 Último mensaje 15 Julio 2005, 03:28 am
por Thaorius
¡¡¡ver procesos!!!! « 1 2 »
Programación Visual Basic
zerofive 17 5,908 Último mensaje 8 Julio 2006, 21:29 pm
por megateam
Listar procesos y realizar cosas con los procesos
Programación Visual Basic
sebas369 2 3,581 Último mensaje 14 Julio 2006, 16:08 pm
por sebas369
procesos con vb
Programación Visual Basic
kriptonitex 9 2,940 Último mensaje 30 Septiembre 2006, 20:33 pm
por hexabinarios
Id de procesos [VB.NET]
.NET (C#, VB.NET, ASP)
Grave 5 7,539 Último mensaje 6 Diciembre 2007, 15:41 pm
por elmaro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines