Linux読み書きメッセージキュー


//リードメッセージキュー
#include
#include
#include
#include
#include
#include
#include
#include 
#include 
#include 		   
 struct msgbuf {
   long mtype;       /* message type, must be > 0 */
   char mtext[1024];    /* message data */
			};	
int main(int argc,char *argv[])
{
	int msgid;
	int ret = 0;
	
	int type;
	int len ;
	int flag = 0;
	
	if(argc == 1)
	{
		fprintf(stderr,"Usage:%s   
"
,argv[0]); exit(EXIT_FAILURE); } if(argc == 2) { type = atoi(argv[1]); flag = 0; } if(argc == 3) { int type = atoi(argv[1]); flag = flag |IPC_NOWAIT; } msgid = msgget(0X1234, 0666); if(msgid == -1) { if(errno == ENOENT) { printf("
"
); } if(errno == EEXIST) { printf("
"
); } perror("msgget err
"
); return -1; } printf("msgid:%d
"
,msgid); struct msgbuf buf; memset(&buf,0,sizeof(struct msgbuf)); ret = msgrcv(msgid, &buf,1024, type,flag); if(ret <0) { perror("msgsnd err"); return -1; } buf.mtext[ret] = '\0'; printf("mtext:%s
"
,buf.mtext); return 0; }

//書き込みキュー
#include
#include
#include
#include
#include
#include
#include
#include 
#include 
#include 		   
	
 struct msgbuf {
   long mtype;       /* message type, must be > 0 */
   char mtext[1024];    /* message data */
			};	

int main(int argc,char *argv[])
{
	int msgid;
	if(argc != 3)
	{
		fprintf(stderr,"Usage:%s   
"
,argv[0]); exit(EXIT_FAILURE); } int type = atoi(argv[1]); int len = atoi(argv[2]); msgid = msgget(0X1234, 0666 |IPC_CREAT |IPC_EXCL); //key_t key=ftok("./msgfile",'a'); //printf("key =[%x]
",key);
//msgid = msgget(key, 0666 |IPC_CREAT); if(msgid == -1) { if(errno == ENOENT) { printf("
"
); } if(errno == EEXIST) { printf("
"
); } perror("msgget err
"
); return -1; } printf("msgid:%d
"
,msgid); struct msgbuf buf; memset(&buf,0,sizeof(struct msgbuf)); buf.mtype =type; stpcpy(buf.mtext,"11111111"); int ret = msgsnd(msgid, &buf,len, IPC_NOWAIT); if(ret <0) { perror("msgsnd err"); return -1; } printf(" ...
"
); }