进程间通信简介-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

进程间通信简介

在这里插入图片描述

进程间通信简介

进程间进程简称IPC(interprocess communication),进程间通信就是在不同进程之间传递信息或交换信息

进程间通信的目的

数据传输:一个进程需要将它的数据发送给另一个进程

资源共享:多个进程之间共享同样的资源(譬如文件共享)

通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件,比如子进程终止时需要通知其父进程

进程控制:有些进程希望完全控制另一个进程的执行(如 Debug进程),此时控制进程希望能够拦截另一个进程的所有异常,并能够及时知道它的状态改变

如何实现进程间通信

由于不同的进程都各自运行在自己的地址空间、这些地址空间相互隔离,一个进程不能直接读取或修改另一个进程的数据(也就是不能直接访问另一个进程的资源),因此不同的进程之间想要实现通信是比较困难的

如果想要实现进程间通信,我们需要借助第三方资源,这个第三方资源其实就是公共资源这个资源不属于任何进程,而是需要进行通信的各个进程之间的公共资源,这些进程都可以去访问这个公共资源,譬如向公共资源写入数据、或者从公共资源读取数据,从而实现进程间通信的目的

因为这个第三方资源是由内核提供,所以进程间通信是需要内核参与的

进程间通信的本质:由OS参与,提供一份所有进程都可以访问的公共资源

公共资源包括:内存块、队列、文件等,所以就出现了多种不同的进程间通信的方法

进程间通信的方法

管道

  • 管道是 linux 系统中最古老的一种进程间通信方法,我们把一个进程连接到另一个进程的数据流称为管道!

  • 普通管道 pipe:通常有两种限制,一是单工,数据只能单向传输;二是只能在父子或者兄弟进程间使用

  • 流管道 s_pipe:去除了普通管道的第一种限制,为半双工,可以双向传输;只能在父子或兄弟进程间使用

  • 有名管道 name_pipe(FIFO):去除了普通管道的第二种限制,并且允许在不相关(不是父子或兄弟关系)的进程间进行通讯

    • 命名管道是有名字的,所以在进行进程间通信之前,需要创建这个管道文件,命名管道文件存在文件系统中,管道文件有自己的名字,只要对这个管道文件进行读写操作,就可以向管道中写入数据或从管道中读取数据。所以,命名管道可以作为同一台主机上的任意进程之间进行通信

信号

  • 信号可以作为进程间的通信手段,譬如用于通知某个进程发生了某事!

内存映射

  • 内存映射就是将文件映射到进程的地址空间,然后直接通过读写地址的方式去访问这个文件的内容。适用于多个进程之间的文件共享

消息队列

  • 消息队列定义:消息队列是存放在内核中的消息链表,由消息队列标识符标识

  • 消息队列的优势:克服了信号传递信息少、管道无格式字节流、缓冲区大小受限等缺陷

  • 消息队列类型:包括POSIX消息队列和System V消息队列

  • 消息队列在UNIX中的应用:UNIX系统中,不同进程通过消息队列共享资源,允许进程发送格式化数据流给任意进程

  • 消息队列操作权限:有足够权限的进程可以向队列添加消息,有读权限的进程可以读取队列中的消息

共享内存

  • 共享内存定义:共享内存是映射到多个进程地址空间的一段内存,由一个进程创建,但多个进程可以访问

  • 共享内存的优势:作为最快的进程间通信(IPC)方式,专门设计来克服其他IPC方式的效率低下问题

  • 共享内存的使用:通常与其他通信机制(如信号量)结合使用,以实现进程间的同步和通信

套接字(Socket)

  • Socket定义:Socket是一种基于网络的进程间通信(IPC)方法,支持同一主机或网络连接的不同主机上的应用程序交换数据

  • Socket在网络通信中的作用:Socket是网络通信的基础

  • 客户端/服务器通信流程

    • 应用程序创建Socket:每个应用程序创建一个Socket,作为通信的“设备”

    • 服务器绑定Socket:服务器将Socket绑定到众所周知的地址,以便客户端能够定位并连接到服务器

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

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

相关文章

武汉星起航:一站式服务,助力亚马逊卖家高效运营,实现收益飞跃

在跨境电商的浪潮中,武汉星起航电子商务有限公司以其独特的一站式跨境电商服务,为众多亚马逊卖家提供了强有力的支持,助力他们在不断发展的市场中脱颖而出,实现收益的大幅提升。 武汉星起航的一站式跨境电商服务,以其…

Python 爬虫:多进程,多线程爬虫<提高爬取效率>

关于多进程,多线程的知识,请自行查询资料补充 ~~~~~~~~~~~ 使用多进程: 在python中,使用多进程需要先导包: from threding import Threaddef work(name):for i in range(1000):print(f"我是线程:{n…

如何使用styled实现嵌套组件继承父组件Props以及样式定义

文章目录 前言案例举例1. 首先,在syled.tsx定义DemoBlock组件,并且使用内嵌组件2. 在页面中使用,传递属性 总结 前言 当使用styled-components将属性传递给嵌套组件时,可以通过将属性和样式定义应用于嵌套组件的父组件来实现。然…

JAVA医院绩效考核系统源码:三级公立医院绩效考核系统源码 可源码交付,支持二开

JAVA医院绩效考核系统源码:三级公立医院绩效考核系统源码 可源码交付,支持二开 医院绩效考核系统是一个集数据采集、分析、评估、反馈于一体的信息化工具,旨在提高医疗服务质量、优化资源配置、促进医院可持续发展。以下是对医院绩效考核系统…

Django靓号管理系统:实现Home页面

在本文中,我们将详细介绍如何在Django靓号管理系统中实现Home页面。Home页面是用户成功登录后看到的第一个页面,它应该提供一个友好的欢迎信息和系统的基本布局。 1. 更新 ​​urls.py​​ 首先,我们需要确保 ​​urls.py​​ 文件中包含了 Home 页面的 URL 配置: # url…

API接口知识小结

应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

使用c++设计一个计算器

使用c设计一个简单的计算器&#xff0c;它支持不带括号的四则运算&#xff0c;计算器要满足先乘除后加减的规则 #include <iostream> #include <string> #include <vector> #include <sstream>// 定义运算符的优先级 int precedence(char op) {if (op…

Java Records: 简化数据携带类的利器

Java Records: 简化数据携带类的利器 引言 在 Java 14 中引入并在 Java 16 中成为正式特性的 record&#xff0c;是为了简化不可变数据携带类的创建。它极大地减少了样板代码&#xff0c;使得代码更加简洁和易读。本文将详细介绍 record 的用法和特点。 什么是 Record? re…

Lua 流程控制

Lua 流程控制 Lua 是一种轻量级的编程语言,通常用于嵌入应用程序中,提供灵活的扩展和定制功能。流程控制是编程语言的核心组成部分,它决定了程序执行的顺序和条件。在 Lua 中,流程控制主要通过条件语句、循环语句和函数调用实现。 条件语句 条件语句用于根据不同的条件执…

Java访问修饰符的区别

public&#xff1a;公开的&#xff0c;任何地方都可以访问。 protected&#xff1a;受保护的&#xff0c;同一个包中的类和所有子类(可跨包)可以访问。 private&#xff1a;私有的&#xff0c;只有在同一个类中可以访问。 默认&#xff08;无修饰符&#xff09;&#xff1a;包级…

ORBSLAM3_ROS_Ubuntu18_04环境搭建安装

orbslam3安装 ORB-SLAM3配置及安装教程&#xff08;2023.3&#xff09;_orbslam3安装-CSDN博客 换源&#xff0c;换成国内的 搜索software 安装工具 sudo apt install git sudo apt update sudo apt install gcc g cmake安装 cmake安装新版本 ubuntu20.04安装cmake详细…

转让无区域商业管理公司基本流程和要求

无区域公司转让的条件和要求取决于您的业务需求和目标。我们的专业团队将与您合作&#xff0c;深入了解您的公司背景、行业情况和发展计划&#xff0c;为您量身定制适合您的转让方案。无论是公司规模、经营期限、资产状况还是法律形式&#xff0c;我们都将综合考虑确保达到您的…

乙级资质企业开展物理污染防治工程的设计规范

1. 国家和地方标准 乙级资质企业首先必须遵守国家和地方有关物理污染防治工程设计的各项标准和规范&#xff0c;包括但不限于&#xff1a; GB/T 36610-2018《环境影响评价技术导则 声环境》&#xff1a;用于指导噪声污染防治工程的设计。 GB 8702-2014《电磁环境控制限值》&…

一键掌控,文件格式转换无忧!轻松驾驭各种文件格式,高效管理您的数字世界

信息爆炸的时代&#xff0c;我们每天都会接触到各种各样的文件格式。无论是工作文档、图片、视频还是音频文件&#xff0c;它们都以不同的格式存在于我们的电脑和移动设备中。然而&#xff0c;不同的软件和应用往往只支持特定的文件格式&#xff0c;这给我们的工作和生活带来了…

数据结构历年考研真题对应知识点(树的基本概念)

目录 5.1树的基本概念 5.1.2基本术语 【森林中树的数量、边数和结点数的关系&#xff08;2016&#xff09;】 5.1.3树的性质 【树中结点数和度数的关系的应用&#xff08;2010、2016&#xff09;】 【指定结点数的三叉树的最小高度分析&#xff08;2022&#xff09;】 5.1…

[软件安装]Dev C++

一、下载Dev C软件安装包 1、官网下载官网 2、百度网盘下载压缩包 二、安装Dev C 1、解压Dev C软件安装包 2、找到【Dev-Cpp 5.11…】应用程序&#xff0c;右键选择【以管理员身份运行】它 3、设置语言 回到桌面&#xff0c;右键桌面上的【Dev C 5.11软件图标】&#xff0c…

全面指南:更改SQL Server端口后的用户通知策略

在企业环境中&#xff0c;出于安全或配置需求&#xff0c;可能需要更改SQL Server的默认端口。然而&#xff0c;一旦端口更改&#xff0c;所有依赖于旧端口的应用程序和用户都将受到影响。因此&#xff0c;确保所有用户和应用程序知晓并适应新的端口设置至关重要。本文将提供一…

python正在表达式.*与(.*)的区别

1、两者都能匹配任意长度任意字符&#xff08;.匹配任意字符,*匹配任意长度&#xff09;&#xff1b; 2、(.*)会将匹配的结果以组的形式匹配到赋值的变量中&#xff1b; 3、(.*)括号中加上&#xff1f;可以实现非贪婪模式(.*?) 例子&#xff1a; file_name "387-(F_PG…

短剧小程序系统cps分销开发搭建

短剧小程序系统CPS分销开发搭建是一个相对复杂但具有广阔商业前景的过程。以下是关于短剧小程序系统CPS分销开发搭建的详细步骤和要点&#xff1a; 需求分析与市场调研&#xff1a; 深入了解市场需求、用户画像和竞品分析&#xff0c;明确产品定位和功能需求。研究目标用户的消…

什么是DEQ?

DEQ (Delivered Ex Quay, Duty Paid) 是指目的港码头交货 (……指定目的港)。 这种术语规定卖方在指定目的港码头将货物交给买方处置&#xff0c;并且不办理进口清关手续。 DEQ适用范围 DEQ术语仅适用于海运、内河运输或多式联运&#xff0c;并且在目的港码头卸货时使用。如…