进程间通信之消息队列及共享内存

news2024/9/22 1:23:09

1.IPC对象:
    内存文件

    1.ipcs 
      查看系统重的消息队列、共享内存、信号灯的信息
    2.ipcrm
      删除消息队列、共享内存、信号灯
      ipcrm -Q/-M/-S key
      ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID
      

消息队列:


    3.操作流程:
        创建消息队列 -> 发送消息 -> 接收消息

        4.函数接口:
        1.ftok
          key_t ftok(const char *pathname, int proj_id);
          功能:
            根据pathname和proj_id生成一个key_t类型的key值,将来可以用来创建消息队列、共享内存、信号灯
          参数:
            pathname:文件路径
            proj_id:8位非0值
          返回值:
            成功返回key_t类型的IPC对象的key值
            失败返回-1 

函数接口:      

  2.msgget 
          int msgget(key_t key, int msgflg);
          功能:
            根据key值对象的IPC对象创建一个消息队列
          参数:
            key:IPC对象名字 
            msgflg:IPC_CREAT    对象不存在就创建
                   IPC_EXCL     对象存在报错
                   IPC_CREAT | 0664 
          返回值:
            成功返回消息队列ID
            失败返回-1 

        3.msgsnd 
          int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
          功能:
            向消息队列中发送消息
          参数:
            msqid:消息队列的ID号
            msgp:发送消息空间的首地址
                struct msgbuf {
                    long mtype;       /* message type, must be > 0 */
                    char mtext[1];    /* message data */
                };
            msgz:发送消息内容的大小(不包含发送消息类型)
            msgflg:属性,默认为0
          返回值:
            成功返回0 
            失败返回-1 

        4.msgrcv 
          ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
          功能:
            从消息队列中接收消息
          参数:
            msqid:消息队列的ID号 
            msgp:存放接收到消息空间的首地址
            msgsz:最多接收消息的空间的大小
            msgtyp:想要接收消息的类型
            msgflg:属性,默认为0 
          返回值:
            成功返回实际接收的字节数
            失败返回-1 

        5.msgctl 
          int msgctl(int msqid, int cmd, struct msqid_ds *buf);
          功能:
            向消息队列发送一条cmd命令
          参数:
            msqid:消息队列的ID号
            cmd:IPC_RMID    删除消息队列 
            buf:默认传NULL
          返回值:
            成功返回0 
            失败返回-1 

练习:编写2个进程任务(recv.c send.c),send.c从终端接收一个字符串利用消息队列发送给recv.c
                                   recv.c从消息队列中接收消息并打印在终端

共享内存:

2.共享内存:
    进程间通信最高效的形式

    1.操作方式:
        创建共享内存 -> 映射到共享内存中 -> 共享内存操作 -> 解除映射 -> 删除共享内存 

    2.函数接口:
        1.ftok 
        
        2.shmget 
          int shmget(key_t key, size_t size, int shmflg);
          功能:
            创建一个共享内存
          参数:
            key:IPC对象名称
            size:共享内存的大小
            shmflg:
                IPC_CREAT 
                IPC_EXCL 
          返回值:  
            成功返回共享内存ID
            失败返回-1 
        
        3.shmat
          void *shmat(int shmid, const void *shmaddr, int shmflg);
          功能:
            将一个地址映射到共享内存中
          参数:
            shmid:共享内存ID号
            shmaddr:NULL     让系统选择一个合适的地址映射
                    不为NULL shmflg 设定为SHM_RND 选择离给定地址最近的能够映射的地址进行映射
                             否则传递地址为4k的整数倍
          返回值:
            成功返回映射到共享内存空间中的地址
            失败返回NULL

        4.shmdt 
          int shmdt(const void *shmaddr);
          功能:
            解除映射 
          参数:
            shmaddr:映射的地址
          返回值:
            成功返回0 
            失败返回-1 

        5.shmctl
          int shmctl(int shmid, int cmd, struct shmid_ds *buf);
          功能:
            向共享内存发送命令
          参数:
            shmid:共享内存ID号
            cmd:IPC_RMID    删除共享内存
            buf:NULL 
          返回值:
            成功返回0 
            失败返回-1 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1488911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js--》探寻Cannon.js构建震撼的3D物理交互体验(一)

我们用three.js可以绘制出各种酷炫的画面,但是当我们想要一个更加真实的物理效果的话,这个时候我们就需要一个物理的库,接下来我们就讲解一下今天要学习的canon,它可以给我们提供一个更加真实的物理效果,像物体的张力、…

如何把chatgpt-on-wechat 与RWKV-Runner结合打造本地微信chatgpt机器人

环境: Win10 11代i7 64G内存 500G硬盘 chatgpt-on-wechat RWKV-Runner 问题描述: 如何把chatgpt-on-wechat 与RWKV-Runner结合打造本地微信chatgpt机器人 解决方案: chatgpt-on-wechat项目 有4种运行程序的方式供你选择: …

国科大计算机网络实验 HTTP服务器

UCAS_CN_LAB HTTP服务器实验 实验要求 •实现:使用C语言实现最简单的HTTP服务器 •同时支持HTTP(80端口)和HTTPS(443端口) •使用两个线程分别监听各自端口 •只需支持GET方法,解析请求报文&#xff…

多点通信与域套接字:2024/3/4

作业1&#xff1a;广播 发送端&#xff1a; #include <myhead.h> int main(int argc, const char *argv[]) {//1.创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}printf("sfd%d\n",sfd);//2.设置当前…

Android res/values/locale_config.xml文件

Android res/values/locale_config.xml文件 各个国家/地区在android系统里面的缩写代码。最典型的用途是本地化。 <?xml version"1.0" encoding"utf-8"?> <!-- Copyright (C) 2015 The Android Open Source ProjectLicensed under the Apache L…

大模型推荐落地啦!融合知识图谱,蚂蚁集团发布!

引言&#xff1a;电商推荐系统的新突破 随着电子商务平台的蓬勃发展&#xff0c;推荐系统已成为帮助用户在信息过载时代中筛选和发现产品的关键工具。然而&#xff0c;传统的推荐系统主要依赖历史数据和用户反馈&#xff0c;这限制了它们在新商品推出和用户意图转变时的有效性…

【洛谷 P8682】[蓝桥杯 2019 省 B] 等差数列 题解(数学+排序+辗转相除法)

[蓝桥杯 2019 省 B] 等差数列 题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列&#xff0c;只记得其中 N N N 个整数。 现在给出这 N N N 个整数&#xff0c;小明想知道包含这 N N N 个整数的最短的等差数列有几项&#xff1f; 输…

ROS 2基础概念#3:主题(Topic)| ROS 2学习笔记

在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;主题&#xff08;Topics&#xff09;是实现节点之间通信的主要机制之一。节点&#xff08;Node&#xff09;可以发布&#xff08;publish&#xff09;消息到话题&#xff0c;或者订阅&#xff08;subscribe&…

搜索回溯算法(DFS)1------递归

目录 简介&#xff1a; 递归问题解题的思路模板 例题1&#xff1a;汉诺塔 例题2&#xff1a;合并两个有序链表 例题3&#xff1a;反转链表 例题4&#xff1a;两两交换链表中的节点 例题5&#xff1a;Pow&#xff08;x,n&#xff09;-快速幂 结语&#xff1a; 简介&…

攻防世界-get_post

题目信息 相关知识 -G&#xff1a;表示GET请求&#xff0c;缺省POST -d参数用于发送 POST 请求的数据体 使用-d参数以后&#xff0c;HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法&#xff0c;因此可以省略-X PO…

Vue.js 深度解析:模板编译原理与过程

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Springboot+vue的船舶监造系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的船舶监造系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的船舶监造系统&#xff0c;采用M&#xff08;model&#xff09;V&#xff…

山西电力市场日前价格预测【2024-02-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-25&#xff09;山西电力市场全天平均日前电价为386.45元/MWh。其中&#xff0c;最高日前电价为765.92元/MWh&#xff0c;预计出现在18:45。最低日前电价为203.79元/MWh&#xff0c;预计…

【计算机毕业设计】044学生管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

C# 不可识别数据库格式问题

C#是一种流行的编程语言&#xff0c;用于开发各种类型的应用程序&#xff0c;包括与数据库交互的应用程序。然而&#xff0c;在处理数据库时&#xff0c;有时会遇到一些错误和问题。其中之一就是数据库格式不可识别的错误。 在C#中&#xff0c;我们通常使用ADO.NET来连接和操作…

【教程】Kotlin语言学习笔记(四)——方法(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 第四章 《方法》 文章目录 【…

openGauss学习笔记-235 openGauss性能调优-系统调优-资源负载管理-资源管理准备-创建资源池

文章目录 openGauss学习笔记-235 openGauss性能调优-系统调优-资源负载管理-资源管理准备-创建资源池235.1 背景信息235.2 前提条件235.3 操作过程235.3.1 创建资源池235.3.2 管理资源池235.3.3 删除资源池 235.4 查看资源池的信息 openGauss学习笔记-235 openGauss性能调优-系…

探索Ubuntu命令行:常见问题与解决方案

一、引言 Ubuntu&#xff0c;作为一款流行的Linux发行版&#xff0c;其命令行界面&#xff08;CLI&#xff09;为用户提供了丰富的功能和灵活性。然而&#xff0c;对于新手来说&#xff0c;命令行可能会带来一些挑战。本文将探讨一些在使用Ubuntu命令行时可能遇到的问题及其解决…

Python算法100例-3.1 回文数

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.巧用字符串技巧 1&#xff0e;问题描述 打印所有不超过n&#xff08;取n<256&#xff09;的其平方具有对称性质的数&#xff08;也称回…

加密与安全_ 凯撒密码

文章目录 Pre概述Code 实现 凯撒密码字母频率分析攻击Code解密凯撒密码 小结 Pre PKI - 02 对称与非对称密钥算法 概述 凯撒密码是一种简单的替换加密技术&#xff0c;也称为移位密码。它是古典密码学中最早的密码之一&#xff0c;得名于古罗马军队领袖凯撒尤利乌斯&#xff…