Skip to content


Learning Linux IPC, part I Pipes

pipe is two file descriptors, one for reading and the other for writing.
since all file descriptors are inherited by child processes, pipe can
provide a way for communication between parent and child processes.

        #include <stdio.h>
        #include <unistd.h>
        #include <sys/types.h>
 
        main()
        {
                int     fd[2];
                pid_t   childpid;
 
                pipe(fd);
 
                if((childpid = fork()) == -1)
                {
                        perror("fork");
                        exit(1);
                }
 
                if(childpid == 0)
                {
                        /* Child process closes up input side of pipe */
                        close(fd[0]);
                }
                else
                {
                        /* Parent process closes up output side of pipe */
                        close(fd[1]);
                }
                .
                .
        }
#include <stdio.h>
 
int main(void)
{
        FILE *pipein_fp, *pipeout_fp;
        char readbuf[80];
 
        /* Create one way pipe line with call to popen() */
        if (( pipein_fp = popen("ls", "r")) == NULL)
        {
                perror("popen");
                exit(1);
        }
 
        /* Create one way pipe line with call to popen() */
        if (( pipeout_fp = popen("sort", "w")) == NULL)
        {
                perror("popen");
                exit(1);
        }
 
        /* Processing loop */
        while(fgets(readbuf, 80, pipein_fp))
                fputs(readbuf, pipeout_fp);
 
        /* Close the pipes */
        pclose(pipein_fp);
        pclose(pipeout_fp);
 
        return(0);
}

Posted in Linux. Tagged with , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.