Cプロセス間通信--メッセージキュー
1456 ワード
メッセージキューは、PosixメッセージキューシステムVメッセージキューを含むメッセージのリンクテーブルである.十分な権限を持つプロセスは、キューにメッセージを追加し、読み取り権限を付与されたプロセスは、キュー内のメッセージを読み出すことができます.メッセージキューは、信号ベアラ情報量が少なく、パイプがフォーマットレスバイトストリームのみをベアラできること、バッファサイズが制限されていることなどの欠点を克服します.
//メッセージキューA
//メッセージキューB
//メッセージキューA
#include
#include
#include
#include
#include
typedef struct msgbuf{
long mtype;
char mtext[256];
}msgbuf_t;
int main(){
key_t key;
key = ftok("hello",31);
if(key==-1){
perror("ftok");
return 1;
}
int msg = msgget(key,IPC_CREAT|0664);
printf("key = %d
",key);
if(msg==-1){
perror("msgget");
return 2;
}
msgbuf_t mb;
mb.mtype = 3;
strcpy(mb.mtext,"this is test
");
int s = msgsnd(msg,&mb,strlen(mb.mtext)+1,0);
if(s==-1){
perror("msgsnd");
return 3;
}
return 0;
}
//メッセージキューB
#include
#include
#include
#include
#include
typedef struct msgbuf{
long mtype;
char mtext[256];
}msgbuf_t;
int main(){
key_t key;
key = ftok("hello",31);
if(key==-1){
perror("ftok");
return 1;
}
int msg = msgget(key,IPC_CREAT|0664);
printf("key = %d
",key);
if(msg==-1){
perror("msgget");
return 2;
}
msgbuf_t mb;
ssize_t s = msgrcv(msg,&mb,256,3,0);
if(s==-1){
perror("msgsnd");
return 3;
}
printf("%s
",mb.mtext);
return 0;
}