• 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 ("发送给解析进程...... ");
    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 ", 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 ", 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 ",ds.msg_perm.__key);
    printf("mode=%o ",ds.msg_perm.mode);
    printf("current total size=%d ",ds.__msg_cbytes);
    printf("current msg count=%d ",ds.msg_qnum);
    printf("system max allow msg size=%d ",ds.msg_qbytes);
    }

  • 相关阅读:
    maven Spring MVC项目
    NET 解析HTML代码——NSoup
    Masstransit开发基于消息传递的分布式应用
    iOS项目生成通用Windows应用
    测试框架mochajs详解
    9宫格拼图
    spring 整合redis
    Linux下SSH Session复制
    File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)
    极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布
  • 原文地址:https://www.cnblogs.com/etangyushan/p/3989199.html
Copyright © 2020-2023  润新知