首页 > 代码库 > linux消息队列相关操作
linux消息队列相关操作
/* 发送消息队列 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct mymsg
{
long mtype; /* message type, must be > 0 */
char mtext[32];
};
#define KEY (key_t)0x1fff
int
main ( int argc, char *argv[] )
{
key_t key;
int msgid;
int res;
key = KEY;
struct mymsg msg;
printf ("发送给解析进程......\n");
strcpy (msg.mtext, "haha");
/* 创建消息队列 */
msgid = msgget (key, 0666 | IPC_CREAT);
if (msgid == -1)
{
perror ("msgget");
}
msg.mtype = 1;
res = msgsnd (msgid, &msg, sizeof(struct mymsg), 0);
printf ("fa ok msg.mtext = %s\n", msg.mtext);
return 0;
}
========================================================
/* 接收消息队列 */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct mymsg
{
long mtype; /* message type, must be > 0 */
char mtext[32]; /* message data */
};
#define KEY (key_t)0x1fff
int main ( int argc, char *argv[] )
{
key_t key;
int msgid;
int res;
key = KEY;
struct mymsg msg;
/* 创建消息队列 */
msgid = msgget (key, 0666 | IPC_CREAT);
if (msgid == -1)
{
perror ("msgget");
}
msg.mtype = 1;
/* libnids抓包信息 */
int i=1;
while(i--)
{
res = msgrcv (msgid, &msg, sizeof(struct mymsg), 0, 0);
printf ("shou ok, msg.mtext = %s\n", msg.mtext);
}
return 0;
}
==========================================================
/*删除消息队列*/
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
/* 消息队列通信的key */
#define KEY (key_t)0x1fff
int rmqueue(key_t key)
{
int msgid, res;
msgid = msgget (key, 0);
res = msgctl(msgid, IPC_RMID, 0);
return 0;
}
int main ( int argc, char *argv[] )
{
key_t key;
key = KEY;
rmqueue(key);
return 0;
}
==========================================================
/* 获取消息队列的状态信息 */
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define NIDS_PRO_KEY (key_t)0x1fff
int main()
{
key_t key;
key = NIDS_PRO_KEY;
int id = msgget(key,0);
if (id == -1) perror("shmget"),exit(-1);
struct msqid_ds ds;
msgctl(id,IPC_STAT,&ds);
printf("key=%x\n",ds.msg_perm.__key);
printf("mode=%o\n",ds.msg_perm.mode);
printf("current total size=%d\n",ds.__msg_cbytes);
printf("current msg count=%d\n",ds.msg_qnum);
printf("system max allow msg size=%d\n",ds.msg_qbytes);
}
linux消息队列相关操作