当前位置:   article > 正文

linux的消息队列的创建和实现_linux 车间消息队列系统构建

linux 车间消息队列系统构建

一 回顾

1 创建的有名管道时候 并不会产生fifo 而是在调用open函数 的时候才会 
2 通过两个无血缘关系的进程 分别对有名管道读和写 
3 读的时候没有数据 是因为有名管道没有数据
  • 1
  • 2
  • 3

消息队列 的概述

在这里插入图片描述
在这里插入图片描述

消息的队列就是消息的链表  存放在内核态中
  • 1
1 特定格式就是以链表的方式存在  
2 每个节点都可以作为发送和接收的中间过渡方式。
3 因为链表的灵活 读取顺序可以打乱
4 并且每个链表都有独立的标识符 用于区分类型
  • 1
  • 2
  • 3
  • 4

1 msgget函数

在这里插入图片描述
在这里插入图片描述
看不不清楚的话

成功返回 id
失败 返回-1 
  • 1
  • 2
key的参数 
  • 1

在这里插入图片描述

#include<sys/stat.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<stdio.h>

int main()
{
    int res;
    
    res=msgget(IPC_PRVATE,0755);
    
    if(res==-1)
    {
        printf("msgget is error\n");//不成功 提示 error
        return -1;
    }
    printf("msgget is sueecss ID is %d\n",res);//成功返回 id
    
      return 0;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
./a.out 之后 
ipcs -q 查看队列 情况  
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述

正常是从0开始 因为我之后试过了 所以不是零开始 
  • 1
./a.out 之后 
返回的 id 值应该累加1
队列也是
  • 1
  • 2
  • 3

在这里插入图片描述
在这里插入图片描述

感觉这样很麻烦 使用 sytem 函数可以解决
  • 1

2 system函数

 system函数 的 形参  就是一条附加的 指令 
 也就是 在执行下载代码的同时查看队列情况。
  • 1
  • 2

在这里插入图片描述

警告 不用 理会 直接 继续 
  • 1
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<stdio.h>


int main()
{
    int res;
    
    res=msgget(IPC_PRVATE,0755);
    
    if(res==-1)
    {
        printf("msgget is error\n");
        return -1;
    }
    printf("msgget is sueecss ID is %d\n",res);
      
     system("ipcs -q");
     
      return 0;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

3 msgctl函数

在这里插入图片描述

用这个实现删除的功能
  • 1
删除指定队列 
比如 94 
  • 1
  • 2
94 为第一个参数 即为msggt函数返回值
cmd :设置为删除消息队列  
*buff: 不需要权限  为 NULL
  • 1
  • 2
  • 3
#include<sys/stat.h>
#include<sys/types.h>
#include<sys/msg.h>
#include<stdio.h>


int main()
{
    int res;
    
    res=msgget(IPC_PRVATE,0755);
    
    if(res==-1)
    {
        printf("msgget is error\n");
        return -1;
    }
    printf("msgget is sueecss ID is %d\n",res);
   
     
     system("ipcs -q");
     
     msgctl(94,IPC_RMID,NULL);     
   
    system("ipcs -q");
   
      return 0;

}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
gcc xxx.c
./a.out
  • 1
  • 2

在这里插入图片描述

94 不存在 验证 成功了 
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/601589
推荐阅读
相关标签
  

闽ICP备14008679号