c linux dup2

c - Usando dup2 para tuberías



linux (2)

También pipe(2,3p) . Cree el tubo, la horquilla, duplique el extremo apropiado del tubo en FD 0 o FD 1 del hijo, luego exec.

¿Cómo uso dup2 para ejecutar el siguiente comando?

ls -al | grep alpha | more


Un pequeño ejemplo con los dos primeros 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 al conectar la entrada en fd [0] a la salida de fd [1]. Deberías leer las páginas man de pipe y dup2. Puedo intentar y simplificar el ejemplo más adelante si tiene 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; }