学习嵌入式第二十九天

news2024/11/26 15:38:41

ipc进程间通信方式

PC,即进程间通信(Inter-Process Communication),是操作系统中不同进程之间交换数据的一种机制。以下是一些常见的IPC方式:

  1. 管道:用于父子进程或兄弟进程之间的通信。
  2. 消息队列:允许进程发送和接收消息。
  3. 信号:一种简单的通知机制,用于通知进程某个事件已经发生。
  4. 共享内存:允许多个进程访问同一块内存区域。
  5. 套接字:支持进程之间的网络通信。
  6. 信号量:用于控制对共享资源的访问。
  7. 文件映射:将文件或设备映射到内存中,实现进程间的数据共享。
  8. 远程过程调用:允许一个进程调用另一个进程的函数或方法。
  9. 事件:用于进程间同步的一种机制,通常与信号量或互斥锁一起使用

 共享内存

共享内存是一种高效的进程间通信(IPC)机制,它允许两个或多个进程共享一个给定的存储区。以下是共享内存在IPC中实现的基本步骤:

  1. 创建共享内存段:首先,一个进程(通常是父进程)创建一个共享内存段。这通常涉及到调用操作系统的API,如shmget在UNIX系统中。

  2. 附加到共享内存:创建共享内存后,其他进程需要将这个共享内存段附加到自己的地址空间中。这通常通过shmat函数实现,它会返回共享内存的地址。

  3. 读写共享内存:一旦共享内存被附加到进程的地址空间,进程就可以像操作自己的内存一样读写共享内存中的数据。

  4. 同步:由于多个进程可以同时访问共享内存,因此需要某种形式的同步机制来避免竞态条件和数据不一致。这通常通过使用信号量(semaphores)、互斥锁(mutexes)或条件变量来实现。

  5. 内存保护:操作系统通常提供对共享内存的保护机制,以确保进程只能访问它们被授权访问的部分。

  6. 分离共享内存:当进程不再需要访问共享内存时,它会从自己的地址空间中分离共享内存段,这通常通过shmdt函数实现。

  7. 删除共享内存:最后,当所有进程都不再需要共享内存时,创建共享内存的进程或拥有足够权限的进程可以删除共享内存段,释放资源。

//step1 产生key值 
ftok //


#include <sys/types.h>
       #include <sys/ipc.h>

       key_t ftok(const char *pathname, int proj_id);
       功能:
             将pathname 和 proj_id 转换为 key值 
       参数:
        @pathname  //给一个路径名 
        @proj_id   //工程id       eg: 'A'
       返回值
          成功 key值
          失败 -1     

//step2 通过key获取ipc对象 (共享内存)
shmget   //shared memory 


//1、申请对象:shmget()
    #include <sys/ipc.h>
    #include <sys/shm.h>
    ps aux|grep a.out
        shared memory get         IPC_CREAT|0666
    int shmget(key_t key, size_t size, int shmflg);
    功能:
         使用唯一键值key向内核提出共享内存使用申请
    参数:key   唯一键值
          size  要申请的共享内存大小
          shmflg 申请的共享内存访问权限,八进制表示
          如果是第一个申请,则用IPC_CREAT
          如果要检测是否存在,用IPC_EXCL
    返回值:
            成功 返回共享内存id,一般用shmid表示
            失败  -1;

            share memory attach

//step3 共享内存 绑定 
shmat 

    映射对象:shmat()
    void *shmat(int shmid, const void *shmaddr, int shmflg);
    功能:将指定shmid对应的共享内存映射到本地内存。
    参数:shmid 要映射的本地内存
          shmaddr 本地可用的地址,如果不确定则用NULL,表示
                  由系统自动分配。
          shmflg  
          0         ,  表示读写
          SHM_RDONLY, 只读
    返回值:
           成功 返回映射的地址,一般等于shmaddr
            失败 (void*)-1        

//step4 解除绑定(映射)

    撤销映射:shmdt
    int shmdt(const void *shmaddr);
    功能:将本地内存与共享内存断开映射关系。
    参数:shmaddr 要断开的映射地址。
    返回值:成功  0
            失败  -1;

          

//step4 销毁IPC对象 
        删除对象:shmctl
    int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control 
    功能:
         修改共享内存属性,也可以删除指定的共享内存对象。
    参数:shmid 要删除的共享内存对象
          cmd 
               IPC_RMID 删除对象的宏
          buff  NULL 表示只删除对象。
    返回值:成功 0
            失败 -1

网络
 

网络是由多个设备通过通信链路相互连接形成的系统,这些设备可以是计算机、服务器、路由器、交换机等。网络的主要功能是实现数据的传输和共享,允许用户访问远程资源、进行通信和协作。

网络可以根据其覆盖范围分为几种类型:

  1. 局域网(LAN):通常覆盖较小的地理区域,如一个办公室或学校。
  2. 广域网(WAN):覆盖较大的地理区域,可以跨越城市、国家甚至全球。
  3. 城域网(MAN):介于LAN和WAN之间,通常覆盖一个城市或地区。
  4. 个人区域网(PAN):覆盖非常小的区域,通常是个人设备之间的连接,如蓝牙耳机和手机。

简单来说 网络就是实现不同主机间通信的方法。

实现网络通信
1.物理层面 有一个 信息通路  

2.软件层面(逻辑层面) 也需要 一个通路 

osi七层模型 

 实际应用到的是 tcp/ip 模型 

 每个层次中,都有自己的一套规范 --- 协议 

IP地址(Internet Protocol Address)是互联网协议地址,它是分配给网络中每个设备的唯一标识符,用于在互联网上进行通信。IP地址使得数据能够在网络中的不同设备之间传输。

IP地址的组成如下:

  1. 版本:IP地址分为IPv4和IPv6两个版本。IPv4是目前最常用的版本,由32位二进制数组成,通常以点分十进制表示,如192.168.1.1。IPv6是较新的版本,由128位二进制数组成,以冒号分隔的十六进制表示,如2001:0db8:85a3:0000:0000:8a2e:0370:7334。

  2. 网络部分:IP地址中的网络部分用于标识设备所属的网络。在IPv4中,网络部分的长度可以根据子网掩码来确定。

  3. 主机部分:IP地址中的主机部分用于标识网络中的特定设备。

  4. 子网掩码:子网掩码用于区分IP地址中的网络部分和主机部分。它是一个与IP地址相对应的32位或128位二进制数,其中网络部分为1,主机部分为0。

  5. 广播地址:广播地址用于向同一网络中的所有设备发送数据。

  6. 特殊用途地址:包括回环地址(127.0.0.1,用于设备测试自身网络栈)、私有地址(如192.168.x.x,通常用于局域网内部通信)等。

  7. 公共地址:也称为公网地址,是分配给互联网上可访问的设备的IP地址,它们是唯一的,可以在全球范围内被识别。

  8. 动态IP地址:由DHCP服务器动态分配,每次设备连接到网络时可能会获得不同的IP地址。

  9. 静态IP地址:是手动配置的,通常用于需要固定IP地址的服务器或设备。

 网络编程

UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。
在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。

* 适用情况:
1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无
线网络)
3. 适合于广播/组播式通信中。
4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通
讯通常采用UDP协议
5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP
方式进行实时数据传输

UDP特点:    //广播 
1.不可靠 
2.无连接 
3.数据报  
 

编程模型 
     c/s    client server    客户端,服务器模型     --- 专用客户端 
     b/s    browser server   浏览器,服务器模型     --- 通用的客户端 
     p2p    peer to peer     点对点传输 
     
     

基于UDP c/s通信模型:
//client ---客户端 --- 角色  --- 主动的角色  
socket    //1.一种特殊的文件 --- 专门用于网络通信(不同主机间的进程)
          //2.socket 编程接口  --- socket 函数 
          //提供了一个可以访问 操作系统 网络功能的接口 
          
sendto //发数据 
//server --- 服务器端 --角色 --- 被动的角色  
socket 
recvfrom    //接收数据 

socket 

 int socket(int domain, int type, int protocol);
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

int socket(int domain, int type, int protocol);
功能:程序向内核提出创建一个基于内存的套接字描述符    
参数:   
      //domain --域 (范围) ---socket 用于什么范围的通信
      //           ipv4 
     //               ipv6 
      domain  地址族,PF_INET == AF_INET ==>互联网程序
                      PF_UNIX == AF_UNIX ==>单机程序
      type    套接字类型:
                SOCK_STREAM  流式套接字 ===》TCP   
              SOCK_DGRAM   用户数据报套接字===>UDP
              //SOCK_RAW     原始套接字  ===》IP
      protocol 协议 ==》0 表示自动适应应用层协议。

返回值:

        成功 返回申请的套接字文件描述符 
        失败  -1
        
      
    ssize_t sendto(    int sockfd,  //用于通信的socket对应的fd
                  const void *buf,  //表示要发送的数据所在的一块空间 
                       size_t len,  //表示发送的字节数 
                        int flags,  //0  --- 默认  
 const struct sockaddr *dest_addr,  //表示 要发送到的 地址 (网络地址 ip+端口号 ) 
                socklen_t addrlen   //表示dest_addr 这个参数的长度 
                );
      
      返回值:
          成功  发送出去的字节的数 
          失败  -1 
 

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

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

相关文章

火绒一键修复所有dll缺失?教你快速修复dll错误问题

你的电脑是否遇到过dll文件缺失的状态&#xff1f;那么应该如何将dll文件进行修复&#xff0c;不知道大家有没有听过火绒和电脑dll修复工具一键修复所有的dll缺失&#xff1f;今天我们就来了解一下如何使用火绒和电脑dll修复工具修复电脑错误dll文件丢失的问题。 dll是什么&…

海南云亿商务咨询有限公司靠谱不?

在这个短视频与直播浪潮席卷而来的时代&#xff0c;抖音电商以其独特的魅力迅速崛起&#xff0c;成为无数商家争相入驻的新战场。作为这一领域的佼佼者&#xff0c;海南云亿商务咨询有限公司凭借其专业的服务、前瞻性的视野和实战型的策略&#xff0c;正引领着一批又一批的商家…

【C语言进阶】数据如何安家?C语言内存中的存储艺术深度解析

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言调试 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言数据在内存中的存储 &#…

如何应对突发技术故障和危机:开发团队的应急策略

开发团队如何应对突发的技术故障和危机&#xff1f; 在数字化时代&#xff0c;软件服务的稳定性对于企业至关重要。然而&#xff0c;即使是大型平台&#xff0c;如网易云音乐&#xff0c;也可能遇到突发的技术故障。网页端出现502 Bad Gateway 报错&#xff0c;且App也无法正常…

云计算day30

1. 配置⼀主⼆从mysql57 1. mycat对mysql8不完全⽀持 2. mysql8主从问题不⼤ get_pub_key1 1. gtids事务复制 2. 删除/etc/my.cnf 3. 同步data⽂件需要先停⽤mysql服务&#xff0c;删除data⽬录中的 auto.cnf 4. gtid模式以及经典模式都需要锁表 flush tables with rea…

6 - Linux PXE高效批量网络装机

目录 一、PXE概述 1.简介 2.优点 3.前提条件 二、搭建PXE远程安装服务器 三、实现Kickstart无人值守安装 一、PXE概述 1.简介 PXE&#xff08;Preboot eXcution Environment&#xff09;预启动执行环境&#xff0c;是由Intel公司开发的网络引导技术&#xff0c;工作在Cl…

工业4G路由器

设备概述 路由器是基于4G 技术研发的无线路由网关设备&#xff0c;除了具备传统路由器 的 VPN 、防火墙、 NAT 、 PPPoE 、 DHCP 等功能之外&#xff0c;还能支持 4G 无线拨号&#xff0c;提供最高可达 150Mbps 的无线高速带宽。路由器支持四个以太网接口&#xff0c;可更好…

招募活动投稿展示 | 感受科技温度,从一个 LLM 应用开始

活动介绍 谷歌开发者招募活动是专为 Google 技术的爱好者及开发者们开展的活动&#xff0c;旨在鼓励大家通过多种形式 (文章/视频/coding 等) 创作与 Google 技术相关的讲解分享、实践案例或活动感受等内容&#xff0c;展示代码、框架、平台在真实世界中的生动表现&#xff0c;…

【Win开发环境搭建】Redis与可视化工具详细安装与配置过程

&#x1f3af;导读&#xff1a;本文档提供了Redis的简介、安装指南、配置教程及常见操作方法。包括了安装包的选择与配置环境变量的过程&#xff0c;详细说明了如何通过修改配置文件来设置密码和端口等内容。同时&#xff0c;文档还介绍了如何使用命令行工具连接Redis&#xff…

商品数据获取api接口:电商API接口助力内部平台商品定价!

对于很多电商内部平台来讲&#xff0c;品牌方在为内部平台的商品定价时&#xff0c;通常会获取主流电商平台的商品数据以供参考&#xff0c;具体来看&#xff0c;这主要涉及以下步骤&#xff1a; 选择合适的API接口服务商。电商API接口能够提供来自多个主流电商平台的商品数据…

06--kubernetes.pod管理与投射数据卷

前言&#xff1a;上一章记录了部署k8s常用的两个方式&#xff0c;这一章就简单一些&#xff0c;整理一下k8s资源对象的配置和管理命令。 1、集群状态检查 前天搭建的环境&#xff0c;然后关机了两天今天开启后第一时间需要检查集群环境是否正常 [rootk8s-master1 ~]# kubect…

【html+css 绚丽Loading】000012 五行伸缩杖

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

js禁用浏览器缩放

禁用crtl- &#xff0c;禁用crtl滚轮 但是不能禁用浏览器本身的设置 代码如下&#xff1a; <script> //luwenjie hualunwindow.addEventListener(mousewheel, function(event){if (event.ctrlKey true || event.metaKey) {event.preventDefault();}},{ passive: fals…

数学建模算法总结

数学建模常见算法总结 评价决策类模型 层次分析法 层次分析法根据问题的性质和要达到的总目的&#xff0c;将问题分解为不同的组成因素&#xff0c;并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合&#xff0c;形成一个多层次的分析结构模型&#xff0c;从…

Go 文件操作基本方法大全

前言 在Go语言中&#xff0c;操作文件主要依赖于标准库中的os和io/ioutil&#xff08;注意&#xff1a;io/ioutil在Go 1.16及以后版本中被逐步弃用&#xff0c;推荐使用io和os包中的函数进行替代&#xff09;以及io和bufio等包。以下是一些基于这些基本库操作文件的方法大全&a…

人工智能时代:哪些职业将被取代,哪些职业难以替代?

引言 人工智能&#xff08;AI&#xff09;作为现代科技领域最引人瞩目的创新之一&#xff0c;正以前所未有的速度改变着我们的生活和工作方式。从20世纪50年代AI概念的诞生&#xff0c;到21世纪初的机器学习突破&#xff0c;再到如今深度学习与大数据的结合&#xff0c;人工智能…

记一次在工作中发现的Esper引擎底层逻辑问题

一、问题描述 在最近工作过程中本人遇到客户反馈一个问题&#xff1a;在某SOC平台关联分析规则新建的规则语句能查询到相关日志&#xff0c;但无法触发规则告警。 规则语句大致为&#xff1a; 数据源 "IPS" and not 目的地址 belong 白名单 客户需求是对于IPS告警…

Arduino复制的方法快速搭建ESP32低版本2.0.10开发环境

Arduino复制的方法快速搭建ESP32低版本2.0.10开发环境 1.概述 这篇文章介绍如何使用复制安装包的方式快速搭建好ESP32开发环境&#xff0c;而且是指定的2.0.10低版本。 2.搭建开发环境 1.下载安装包 首先在百度网盘下载ESP32安装包 通过百度网盘分享的文件&#xff1a;esp…

Biomamba教程01-绪论

目录 1、课程目录 2、单细胞技术背景 3、单细胞数据挖掘平台&#xff08;不用代码&#xff09; 1、课程目录 重点是寻找差异基因&#xff0c;进一步用KEGG、GO等进行疾病相关分析 2、单细胞技术背景 3、单细胞数据挖掘平台&#xff08;不用代码&#xff09; loupe.10xgenom…

会话跟踪方案:Cookie Session Token

什么是会话技术&#xff1f; Cookie 以登录为例&#xff0c;用户在浏览器中将账号密码输入并勾选自动登录&#xff0c;浏览器发送请求&#xff0c;请求头中设置Cookie&#xff1a;userName:张三 ,password:1234aa &#xff0c;若登录成功&#xff0c;服务器将这个cookie保存…