Implement piping ("|") using C..(fork used)

c, fork, gcc, pipe

Solution

A simple mistake: your `execl` call should actually be `execlp`. Besides, you can get rid of the `wait` and `close` statements. Then you should check the error code of `execlp`.

Problem

``` #include<stdio.h> #include<unistd.h> #include<stdlib.h> int main(int argc,char **argv) { int fd[2]; pid_t childpid; pipe(fd); childpid=fork(); if (childpid == -1) { perror("Error forking..."); exit(1); } if (childpid) /*parent proces*/ //grep .c { wait(&childpid); //waits till the child send output to pipe close(fd[1]); close(0); //stdin closed dup2(fd[0],0); execlp(argv[2],argv[2],argv[3],NULL); } if (childpid==0) //ls { close(fd[0]); /*Closes read side of pipe*/ close(1); //STDOUT closed dup2(fd[1],1); execl(argv[1],NULL); } return 0; } ``` If i give command line argument as "ls grep .c" i should get all the ".c" files displayed. Pseudocode:- My child process will run "ls" & parent process will run "grep .c".. Parent process waits till the child process completes so that child writes to the pipe. Test run:- ``` bash-3.1$ ls | grep .c 1.c hello.c bash-3.1$ ./a.out ls grep .c bash-3.1$ ``` Why is that happening?

Original source