Cプロセス間通信--メッセージキュー

1456 ワード

メッセージキューは、PosixメッセージキューシステムVメッセージキューを含むメッセージのリンクテーブルである.十分な権限を持つプロセスは、キューにメッセージを追加し、読み取り権限を付与されたプロセスは、キュー内のメッセージを読み出すことができます.メッセージキューは、信号ベアラ情報量が少なく、パイプがフォーマットレスバイトストリームのみをベアラできること、バッファサイズが制限されていることなどの欠点を克服します.
//メッセージキュー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; }