Skip to main content



Pipe is basically used to pass information between the programs. It is uniDirectional in nature. for two way communication we can setup two pipes both for each direction

int fd[2]; here fd[0] is for the read end and fd[1] is for the write end

// C program to illustrate// pipe system call in C#include <stdio.h>#include <unistd.h>#define MSGSIZE 16char* msg1 = "hello, world #1";char* msg2 = "hello, world #2";char* msg3 = "hello, world #3";  int main(){    char inbuf[MSGSIZE];    int p[2], i;      if (pipe(p) < 0)        exit(1);      /* continued */    /* write pipe */      write(p[1], msg1, MSGSIZE);    write(p[1], msg2, MSGSIZE);    write(p[1], msg3, MSGSIZE);      for (i = 0; i < 3; i++) {        /* read pipe */        read(p[0], inbuf, MSGSIZE);        printf("% s\n", inbuf);    }    return 0;}
int main(){    pid_t pid;    char arr[100],str[100];    int fd[2],nbr,nbw;
    pipe(fd); //Creating a pipe    pid=fork(); //Calling fork to create a child process            if(pid==0)    {        printf("\nEnter a string: ");        gets(str);        nbw=write(fd[1],str,strlen(str));        printf("Child wrote %d bytes\n",nbw);        exit(0);    }    else    {        nbr=read(fd[0],arr,sizeof(arr));        arr[nbr]='\0';        printf("Parent read %d bytes: %s\n",nbr,arr);    }
    return 0;}