Tuesday, 8 November 2011

IPC USING MESSAGE


#include<stdio.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<sys/ipc.h>
#include<string.h>
struct que_structure
{
long num;
char msg[100];
};
int err_sys(char s[])
{
perror(s);exit(1);
}
int makque(int n)
{
int qid;
if((qid==msgget((key_t)n,IPC_CREAT|0666))<0)
err_sys("\nQueue failed\n");
return(qid);
}
int name_to_num(char name[])
{
int x=1,s=0,i;
for(i=0;i<strlen(name);i++)
{
s+=x*(toascii(name[i]));
x*=10;
}
return(s);
}
int send(int qid,char name[])
{
struct que_structure que;
que.num=name_to_num(name);
printf("\n Enter the message :");
scanf("%s",que.msg);
if(msgsnd(qid,&que,sizeof(que),0)<0)
err_sys("\n Send error");
else
printf("\n Message sent successfully\n ");
}
int receive(int qid,char name[])
{
struct que_structure que;
if((msgrcv(qid,&que,sizeof(que),name_to_num(name),0))<0)
err_sys("\n Receive Error");
else
printf("\n Record Message :%s\n",que.msg);
}
main()
{
int i,mid;
char name[20];
mid=makque(46);
printf("1.Send   2.Receive \n");
scanf("%d",&i);
printf("\n Enter name :");
scanf("%s",name);
if(i==1)
send(mid,name);
else if(i==2)
receive(mid,name);
else err_sys("\n Error");
}

OUTPUT
./a.out
1 2 ?
enter name abel

enter message : what deepak(--|--)

message send successfully

1 2 ?
2
enter name abel
  received message : what deepak (--|--)

No comments:

Post a Comment