Thursday, November 17, 2011

C Program to implement Inter Process Communication(IPC) by using Pipe


Inter Process communication is a technique by which a thread in one process shares some information with threads in other processes.A pipe is a buffer,specifically a FIFO(First in First Out) buffer that has 2 ends,a read end and a write end.A thread can write or read depending on the file reference it has.
read() is used to read data and write() is used to write data.

The following is an implementation of Pipe in C Language.There is a main process P1 and 2 child processes C1 and C2 , the main process reads a string and passes it to one of the child process ,the child process C1 receive string from P1,find its length and sends the value to P1.C1 also reads an integer array of length equal to the length of the string and sends it to C2.C2 receive integer array from C1,find the sum of the elements and sends the sum to the parent process P1.The sleep() function is used in the program to suspend the processes for a desired interval of time.
The complete C language source code of  this example program that  implements IPC(Interprocess Communication) using PIPE is given below.
 #include<stdio.h>  
 #include<unistd.h>  
 #include<string.h>  
 void main()  
 {  
 // www.c-madeeasy.blogspot.com  
  int pid[2],pid1[2],pid2[2],pid3[2],pid4[2];  
  int a[20],i,l,s=0;  
  char str[20];  
  pipe(pid);  
  pipe(pid1);  
  pipe(pid2);  
  pipe(pid3);  
  pipe(pid4);   
 if(fork()==0)  
 {  
  sleep(5);  
  close(pid[1]);  
  read(pid[0],str,sizeof(str));  
  for(i=0,l=0;str[i]!='\0';i++)  
  l=l+1;  
  close(pid3[0]);  
  write(pid3[1],&l,sizeof(l));  
  sleep(6);  
  printf("Enter %d array elementz:",l);  
  for(i=0;i<l;i++)  
  scanf("%d",&a[i]);  
  close(pid1[0]);  
  write(pid1[1],a,sizeof(a));  
  close(pid4[0]);  
  write(pid4[1],&l,sizeof(l));  
 }  
 else if(fork()==0)  
 {  
  sleep(2);  
  close(pid1[1]);  
  close(pid4[1]);  
  read(pid4[0],&l,sizeof(l));  
  read(pid1[0],a,sizeof(a));  
  for(i=0;i<l;i++)  
  s=s+a[i];  
  close(pid2[0]);  
  write(pid2[1],&s,sizeof(s));  
 }   
 else    
 {  
  printf("\nEnter string:");  
  scanf("%s",str);  
  close(pid[0]);  
  write(pid[1],str,sizeof(str));  
  sleep(7);  
  close(pid3[1]);  
  read(pid3[0],&l,sizeof(l));  
  printf("\nThe string length=%d",l);  
  sleep(8);  
  close(pid2[1]);  
  read(pid2[0],&s,sizeof(s));  
  printf("\nSum=%d",s);  
 }  
 }  

7 comments:

Post a Comment

Subscribe

The Source Codes Published in this Blog can be used freely for Educational purposes but should not be reproduced on any other Blog or Website without the consent of the author.