int pfork(int);
void process_join(int,int);
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int main()
{
int sum=0,sum0=0;
int *ptr,shmid,id;
shmid=shmget(IPC_PRIVATE,4,0666|IPC_CREAT);
ptr=(int *)shmat(shmid,0,0);
if(shmid < 0)
{
printf("Error\n");
}
id=pfork(2);
if(id==0)
{
sum0=30+45;
printf("parent performing addition\n");
printf("the sum partial sum by parent is :%d\n",sum0);
printf("\n");
}
else
{
if(id==1)
{
*ptr=50+40;
printf("addition by child\n");
printf("partial sum by child is :%d\n",*ptr);
printf("\n");
}
}
//printf("Calling process join for id %d\n",id);
process_join(2,id);
sum=sum0+*ptr;
printf("The sum is : %d",sum);
printf("\n");
printf("End Parent\n");
return 1;
}
int pfork(int x)
{
int j;
for(j=1;j<=(x-1);j++)
{
if((fork())==0)
return j;
}
return 0;
}
void process_join(int x,int id)
{
int j,val;
if(id==0)
{
for(j=1;j<=(x-1);j++)
{
printf("parent process id %d\n\n",getpid());
printf("Parent calling wait:blocked state\n");
val=wait(0);
printf("The child deleted is : %d\n",val);
}
}
else
{
printf("child pid %d\n",getpid());
exit(0);
}
printf("after exit %d\n",getpid());
}
Output:
[04mca8@LINTEL 04mca8]$ cc add4int.c
[04mca8@LINTEL 04mca8]$ ./a.out
addition by child
partial sum by child is :90
child pid 3842
parent performing addition
the sum partial sum by parent is :75
parent process id 3841
Parent calling wait:blocked state
The child deleted is : 3842
after exit 3841
The sum is : 165
End Parent