Linux Cメッセージキュー練習(自己練習記録のみ)
23229 ワード
メッセージキューの簡単な使用クライアントコード サービス側コード
この機能はmsgrcv関数の3番目の関数でプロセスidを使用すれば実現できます.
, id ,
#include
#include
#include
#include
#include
#include
#include
struct sen_usg{
long mtype;
pid_t cpid;
char msg[500];
};
struct send{
long mytype;
char input[256];
};
int main( void )
{
int msgid,ret,pid,key,key1,msgid1;
struct sen_usg snd_msg;
struct send send_p;
pid = getpid();
key = ftok( "/tmp", 0 );
key1= ftok( "/tmp", 9 );
if((key<0)||(key1<0))
{
perror("key fail
");
return -1;
}
msgid1= msgget ( key1,IPC_CREAT|0644 );
msgid = msgget ( key, IPC_CREAT|0644 );
if((msgid==-1)||(msgid1==-1))
{
perror(" msgget failure --->");
return -2;
}
printf("key:%xkey1:%x msgid:%d msgid1:%d
", key,key1,msgid,msgid1);
/* */
snd_msg.mtype=snd_msg.cpid=getpid();
sprintf(snd_msg.msg, "---> %d ,snd_msg.cpid);
ret = msgsnd( msgid,(void *)&snd_msg, sizeof(snd_msg)-sizeof(long), 0);
if( ret<0 )
{
perror("msgsnd failure--->");
return -3;
}
/* */
int n=msgrcv(msgid1,(void *)&send_p,sizeof(send_p)-sizeof(long),(long)pid,0);
if(n<0){
perror("
");
return -4;
}
printf(" 【%s】:
",send_p.input);
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
struct send{
long mtype;
char input[256];
};
struct msgbuf {
long mtype;
int id;
char Mess[500];
};
int main( void )
{
key_t key,key1;
int msgid,ret,msgid2;
struct msgbuf msg;
struct send send_p;
key = ftok( "/tmp", 0 );
key1=ftok("/tmp",9);
if(key1<0){
perror("fail
");
}
if(key<0){
perror("fail
");
}
msgid = msgget ( key, IPC_CREAT|0644 );
msgid2= msgget ( key1, IPC_CREAT|0644 );
if(msgid==-1)
{
perror(" msgget fail --->");
return -2;
}
printf("key:%xkey1:%x msgid:%d msgid1:%d
", key,key1,msgid,msgid2);
/* */
while(1){
ret = msgrcv( msgid,(void *)&msg, sizeof(msg)-sizeof(long), 0, 0);
if( ret<0 )
{
perror(" read msg failure......");
return -3;
}
printf(" [%d] :【%s】
",msg.id,msg.Mess);
/* */
send_p.mtype=msg.id;
sprintf(send_p.input," [%d] ",msg.id);
int Send=msgsnd(msgid2,(void *)&send_p,sizeof(send_p)-sizeof(long),0);
if(Send<0){
perror("
");
return -1;
}
}
return 0;
}
この機能はmsgrcv関数の3番目の関数でプロセスidを使用すれば実現できます.