2010-09-04 22 views

Respuesta

2

Utilizaría pipe(2,3p) también. Cree la tubería, la horquilla, duplique el extremo apropiado de la tubería en FD 0 o FD 1 del niño, luego ejecútelo.

25

Un pequeño ejemplo con los primeros dos comandos. Debe crear una tubería con la función pipe() que irá entre ls y grep y otra tubería entre grep y más. Lo que hace dup2 es copiar un descriptor de archivo en otro. La tubería funciona conectando la entrada en fd [0] a la salida de fd [1]. Deberías leer las páginas man de pipe y dup2. Puedo intentar simplificar el ejemplo más adelante si tienes otras dudas.

#include <sys/types.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <string.h> 
#include <errno.h> 

#define READ_END 0 
#define WRITE_END 1 

int 
main(int argc, char* argv[]) 
{ 
    pid_t pid; 
    int fd[2]; 

    pipe(fd); 
    pid = fork(); 

    if(pid==0) 
    { 
     printf("i'm the child used for ls \n"); 
     dup2(fd[WRITE_END], STDOUT_FILENO); 
     close(fd[WRITE_END]); 
     execlp("ls", "ls", "-al", NULL); 
    } 
    else 
    { 
     pid=fork(); 

     if(pid==0) 
     { 
      printf("i'm in the second child, which will be used to run grep\n"); 
      dup2(fd[READ_END], STDIN_FILENO); 
      close(fd[READ_END]); 
      execlp("grep", "grep", "alpha",NULL); 
     } 
    } 

    return 0; 
} 
+0

se podría mejorar mediante el uso de un solo tenedor() y usando el proceso original, ya sea para ls o grep, pero también voy a dejar eso a usted: P – theprole

+0

¿Cómo debemos canalizar la salida del grep para cuanto mas Simplemente está conectando dos procesos ¿verdad? – CanCeylan

+1

¿No debería cerrar WRITE_END para grep y READ_END para ls (al contrario de lo que hizo)? –

Cuestiones relacionadas