IPC message queue demo
2024-01-09 16:55:39
// .h
#ifndef __IPCCOMMON_H__
#define __IPCCOMMON_H__
#define MSGKEY 1234
#define MAX_TEXT 512
#define MSG_TYPE 111
typedef struct _mymesg
{
long int type;
char context[MAX_TEXT];
}mymsg;
#endif
// create and send
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/msg.h>
#include "ipccommon.h"
int main(void)
{
struct msqid_ds info;
int tempMsgId;
char tempPayload = 0;
mymsg tmpMsgData;
printf("ipc send demo\n");
tempMsgId = msgget((key_t)MSGKEY, 0666 | IPC_CREAT);
if (tempMsgId == -1)
{
printf("error create\n");
}
int loop = 0;
tmpMsgData.type = MSG_TYPE;
while ( loop++ < 11)
{
tmpMsgData.context[0] = tempPayload++;
if(-1 == (msgsnd(tempMsgId, (void*)&tmpMsgData, sizeof(tempPayload), 0)))
{
printf("erro send\n");
}
printf("snd num %d\n", loop);
sleep (1);
}
sleep(10);
exit(0);
printf("ipc send demo finished\n");
}
//rev and ctl
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/msg.h>
#include "ipccommon.h"
int main(void)
{
struct msqid_ds info;
int tempMsgId;
char tempPayload = 0;
char tmpMsgData[sizeof(mymsg)];
printf("ipc rev demo\n");
tempMsgId = msgget((key_t)MSGKEY, 0666 | IPC_CREAT);
if (tempMsgId == -1)
{
printf("error create\n");
}
msgctl(tempMsgId, IPC_STAT, &info);
printf("msg info.number %ld\n", info.msg_qnum);
int loop = 0;
while ( loop++ < info.msg_qnum)
{
if(-1 == (msgrcv(tempMsgId, (void*)&tmpMsgData, MAX_TEXT, MSG_TYPE, 0)))
{
printf("erro rev\n");
}
printf("rev %d num\n", loop);
mymsg* pmsg = (mymsg*)tmpMsgData;
printf("rev: type is %ld, value is %d\n", pmsg->type, pmsg->context[0]);
sleep (1);
}
msgctl(tempMsgId, IPC_STAT, &info);
if (info.msg_qnum == 0)
{
printf("msg empty try to delete\n");
if (0 == msgctl(tempMsgId, IPC_RMID, NULL))
{
printf("successfully delete the tempMsgId\n");
}
}
printf("ipc rev demo finished\n");
}
先运行create send部分,可以分开执行,也可以同时执行,目前是阻塞。
再执行rev部分。rcv 会读取目前msg info,主要是数量,读完后回删除这样
文章来源:https://blog.csdn.net/loveboon1/article/details/135481208
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!