当前位置: 首页 > news >正文

IPC 进程间通信方式

IPC对象(共享内存)

共享内存:

1.是一块,内核预留的空间

2.最高效的通信方式

//避免了用户空间 到 内核空间的数据拷贝

用中间那个get函数,就可以使key与共享内存一一对应

怎么将共享内存与进程关联起来

//step1 产生key值

ftok:

功能:

将pathname 和 proj_id 转换为key值

参数:

pathname: //给一个路径名

proj_id://工程id eg:‘A’、

返回值:

成功 Key值

失败 -1

//step2 通过key获取ipc对象

功能:

使用唯一键值key向内核提出共享内存使用申请

参数:

ipcs:s:show:展示当前工作系统内的共享内存

key:唯一键值要申请的共享内存大小

size:要申请的共享内存的大小

shmflg:申请的共享内存访问权限,八进制表示

如果是第一个申请,则用IPCCREAT

如果要检测是否存在,用IPCEXC

返回值:

成功 返回共享内存id,一般用shmid表示

失败 -1

share memory attach

//step3 共享内存 绑定


网络

网络:

不同主机间的通信问题

情景:

实现网络通信

1.物理层面 有一个 信息通路

有线

无线

5G

4G

星链

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

为了解决不同体系结构的网络互联问题,制定了(OSI网络模型)

OSI七层模型(参考模型):

1.物理层

规定了物理层面的电气特性(比如1V表示高电平这类的)

及相关机械特性

物理层面数据的传输 -----一位一位二进制数据 //比特流

2.数据链路层

规定了 传输数据的格式 //帧数据

目的:就是为了保证物理层数据传输是可靠地

//控制传输过程可靠

3.网络层(网际层)

解决网络 与 网络 之间的 数据传输 //数据包

4.传输层

传输控制层,控制传输过程,保证数据完整和可靠

5.会话层

处理一次会话过程

6.表示层

规定了 传输数据的格式 和 方式 //加密

7.应用层

直接获取要收发的数据

实际使用的是TCP/IP模型

应用层

传输层

网络层

数据链路层

物理层

4层模型:

应用层

传输层

网络层

网络接口层

如何发挥作用?

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

底层协议都是为了上层协议服务的

ARP:地址解析协议


IP地址:就是代表你这台主机的身份证

作用:标识 网络中的一台主机

主机:凡是能够进行网络通信的机器


操作系统角度:

用户层 应用层


内核层 传输层 //这些层次,操作系统已经实现

网络层 //tcp/ip 协议 栈(网络协议栈)

数据链路层

物理层

基本上内核层,操作系统都已经帮我们实现了,我们可以操作的只有应用层

IP地址 //用来标识网络中的一台主机 ---- 通过ip可以找到对应的一台主机

端口号://用来表示主机中某一个具体(进行网络通信)进程

ip+端口号 //进程在网络中的 地址

本质:

32位整形数值

表示方式:

点分十进制

0-255

IP地址的组成:

网络号 + 主机号

网络号 ----表示所处的网络

主机号 ----表示能容纳的主句

主机号全0:表示 网络号

全1:表示 广播

网络编程:

tcp/udp协议:

应用层通过socket访问传输层

tcp协议:

特点:

1.面向连接 // 类似打电话通话之前,必须先打通

2.可靠传输 // 保证数据准确可靠(实现:tcp协议机制 里面的功能)

3.面向字节流程

udp协议:对可靠性要求不高的 WIFI

特点: //广播

1.不可靠

2.无连接

3.数据报


编程实现:

编程模型:

c/s client server 客户端-服务器模型 ------ 专用客户端

b/s browser server 浏览器-服务器模型 ------ 通用客户端

p2p peer to peer 点对点传输

p2p :使用的人越多,传输的效率越好

基于udp c/s通信模型

//client ---------客户端 ----角色 ------主动的角色

socket

//1.一种特殊的文件 -----专门用于网络通信(不同主机间的进程)

//2.socket 编程接口 ---- socket函数

//提供了一个可以访问 操作系统 网络功能的接口

sendto //发数据

//server --------服务器端 -----角色 ----被动的角色

socket

recvfrom //接收数据

....

//socket 创造通信的一端

可以将socket当做一个特殊的文件。创造通信的一端并返回一个文件描述符。

domain:

type(细节)

type如果写0的话就是默认。

sendto:

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

参数:

sockfd: //用于通信的socket对应的fd

buf: //表示要发送的数据所在的一块空间

len: //表示发送的字节数

flags://

dest_addr: //

addrlen: //

返回值:

成功: 发送出去的字节的数目

失败: -1


http://www.mrgr.cn/news/9156.html

相关文章:

  • 零基础5分钟上手亚马逊云科技-用云原生架构开发代码
  • UE管理内容 —— FBX Morph Target Pipeline
  • 每日一练【最大连续1的个数 III】
  • SQL-DCL-数据控制语言
  • R语言绘图系列专栏 | 更新中
  • CSS counters 属性:打造个性化计数器的秘籍
  • OpenAI 通过强大的结构化输出功能增强了其 API
  • Eureka中的多实例配置:如何处理微服务实例动态扩展与缩减
  • 《AI办公类工具PPT系列之三——Gamma APP》
  • 黑神话悟空|风灵月影 35项修改器下载
  • Java-泛型方法工具类
  • 鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人
  • 通过ip获取地址
  • pymysql 与 MySQL数据库交互
  • 资产架构端口应用CDNWAF站库分离负载均衡
  • 建筑楼宇电气安全与能效管理
  • 快团团团长如何高质量选品?如何做最懂顾客的团长!
  • [数据集][目标检测]锤子检测数据集VOC+YOLO格式1510张1类别
  • Compose(10)单元测试
  • python爬虫源码:selenium+browsermobproxy实现浏览器请求抓取