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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  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,391 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,048 Último mensaje 15 Julio 2005, 03:28 am
por Thaorius
¡¡¡ver procesos!!!! « 1 2 »
Programación Visual Basic
zerofive 17 5,182 Ú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,236 Último mensaje 14 Julio 2006, 16:08 pm
por sebas369
procesos con vb
Programación Visual Basic
kriptonitex 9 2,564 Último mensaje 30 Septiembre 2006, 20:33 pm
por hexabinarios
Id de procesos [VB.NET]
.NET (C#, VB.NET, ASP)
Grave 5 6,951 Último mensaje 6 Diciembre 2007, 15:41 pm
por elmaro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines