IPC进程通信以及网络通信

news2024/11/25 22:35:35
一、IPC 进程间通信方式

共享内存 //最高效的进程间通信方式

不需要把用户的东西再复制到内核

他们与内核进行绑定

共享内存:

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

2、最高效的通信方式

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

IPC通信方式 ---操作流程类似的

进程操作:

system v :共享内

这个getc()和内存进行了共享

二、操作
2.1、key值得产生

功能

将pathname和proj_id 转换为key值

参数

  • pathname 给一个路径名
  • proj_id 给一个字符,最低有效8位

返回值

  • 成功返回值是 key值
  • 失败-1

注意 

  • 如果传.的话,我们必须保证是同一个目录,否则产生的key不一样。
  • 所以我们一般写/,代表根目录,根目录只有一个
2.2、通过key值获取ipc对象(共享内存)

shmget(shared memory )

  • 第一个参数:是第一步产生的同一个名字,是唯一键值
  • 第二个参数;指定内存块的大小,申请的共享内存的大小
  • 第三个参数:代表申请的标志(可以指定权限)
  • 如果是第一个申请,则用IPC_CREAT
  • 如果是第二个申请,则用TPC_EXCT

返回值

  • 成功:返回共享内存id,一般用shmid表示
  • 失败 -1

注意点

  • ipcs 代表展示系统里面共享的内存块
  • 进程建立关联
2.3、共享内存 绑定

  • 第一个参数,是指第二步的共享内存块
  • 第二个参数,本意是指要与绑定的空间
  • 第三个参数,表示对权限

返回值

  • 成功 返回绑定的地址
  • 失败
2.4、解绑

解绑只是说他们之间的关系,不在存在了,但是开的内核空间并没有消除掉

#include <sys/ipc.h>
#include <sys/shm.h>
ps auxlgrep a.out
shared memory getint shmget(keyt key,size t size,int shmflg);

功能:
使用唯一键值key向内核提出共享内存使用申请参数:

参数

  • key唯一键值
  • size 要申请的共享内存大小
  • shmflg 申请的共享内存访问权限,八进制表示
  • 如果是第一个申请,则用IPCR如果要检测是否存在,用IPCEXC

返回值:

  • 成功 返回共享内存id,一般用shmid表示
  • 失败 -1;
2.5、销毁

删除只做一个,否则会有争议,因为本身就是一个地方,不需要删多次

删除对象:shmct1

int shmctl(int shmid,int cmd, struct shmid ds *buf);//ctl = control

功能:
修改共享内存属性,也可以删除指定的共享内存对象。

参数:

  • shmid 要删除的共享内存对象
  • cmd
  • IPC RMID 删除对象的宏
  • buff NULL 表示只删除对象。

返回值:

  • 成功0
  • 失败-1
三、进程间通信方式
3.1、基本概念

不同主机间 //网络通信

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

  • 有线
  • 无线
  • 4G
  • 5G
  • 星链

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

能够让其能够进行网络通信(不同主机之间)制定相同的标准(OSI 网络模型)(开放的互联模型)

IP 代表的是一个在网络中的身份证号

IP 地址:

作用 标识 网路中的一台主机

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

3.2、进程通信标准协议

引用模型(参考模型)

OSI模型

1、物理层

规定了物理层面的电气特性及相关机械特性

物理层面数据的传输--- 一位一位的二进制数据

2、数据链路层(物理层的电气特性对应不同的数据格式)

规定了 传输数据的格式 //帧数据 保证物理层的数据可靠

//保证传输过程可靠

3、网络层(网际层)

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

4、运输层(传输层)

传输控制层,控制传输过程,保证数据完整和可靠(保证网络与网络)

5、会话层

处理一次会话过程(用来管理)

6、表示层

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

7、应用层

直接获取要收发的数据

实际应用到的是 TCP /IP 模型(要知道每层的作用)

五层

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

4层模型

  • 应用层
  • 传输层
  • 网络层
  • 网络接口层
3.3、如何发挥作用?

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

底层协议是为了上面服务

IEEE802wifi用的就是


对网络划分

3.4、从操作系统角度出发

用户层 应用层 《--------- 程序员(应用层从传输层取数据)


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

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

                                                数据链路层

                                                物理层

linux里面基本上已经把上面四层写好了

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

3.5、IP号

//用来标识主机中的某一个具体(进行网络通信)的进程

本质:32位整型数值

表示方式 :点分十进制(为了方便人类)

0~255

IP地址的组成:

网络号 + 主机号

注意点

  • 网络号就是告诉我们在同一个地址。
  • ip + 端口 就能够确认通信的进程//进程在网络的地址
  • 主机号----表示能容纳的主机
  • 全是1,广播地址
  • 全是0 ,网络号(一般都是不用)
四、网络编程
4.1、Tcp协议

TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
*适用情况:
1.适合于对传输质量要求较高,以及传输大量数据的通信。
2:在需要可靠数据传输的场合,通常使用TCP协议3.MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TcP协议

TCP协议的特点

1、面向连接

2、可靠传输

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

2、可靠传输//保证数据准确可靠(tcpx协议机制,里面的功能)

3、面向字节流程

4.2、UDP协议

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

UDP特点(对可靠性要求不高,效率高的)WIFI相当于

1、不可靠(只管发,不管其他)//广播

2、无连接()

3、数据报


五、编程实现
5.1、编程模型:
  • c/s client server 客户端服务器 ----- 专用客户端
  • b/s browser secer 浏览器服务器模型 ---- 通用客户端
  • p2p peer to peer 点对点传输
  • p2p 人越多速度越快
  • 离得越近越快
5.2、基于UDP c/s通信模型

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

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

//2、socket 编程接口 --- socket函数提供了一个可以访问操作系统网络功能的接口

sendto // 发数据

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

socket

recvfrom //接收数据

.... 具体操作自己来做

5.3、socket 创建通信的一端

创建文件的一端并且返回文件的描述符返

回这一端。

区域的,可以选择协议

功能:程序向内核提出创建一个基于内存的套接字描述符

参数:
//domain --域(范围)---socket 用于什么范围的通信
domain 地址族,PF_INET =AF_INET=>互联网程序
PF_UNIX==>AF_UNIX==>单机程序

type                套接字类型:

SOCK_STREAM流式套接字 =--》TCP

SOCK_DGRAM用户数据报套接字=-->UDP

SOCK_RAW原始套接字 ===》IP

protocol 协议 ==》0 表示自动适应应用层协议。
type
反回值:

成功 返回申请的套接字id
失败-1:

1、提供可靠,双向,基于字节流

2、提供不可靠,无连接

3、0(全部写0),流报默认tcp,报就是默认udp

5.4、sendto()

参数

  • 1、用于通信的socket对应的fd
  • 2、表示要发送的数据所在的一块空间
  • 3、表示发送的字节数
  • 4、0写0,表示以默认方式发送
  • 5、表示 要发送到的地址(网络地址IP +端口号)
  • 6、表示dest_addr 这个参数的长度

返回值

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

失败:-1

5.5、端口号
端口号:

16位数值(unsigned short)//0~65535(65536个数)//标示一个进程
TCP和 UDP 的端口号是独立的端口号:
(1)功能

  • 作用:唯一的标识一个进程
  • 每一个应用程序进程有一个端口号,
  • 通讯时区分数据包属于哪个应用程序进程

(2)分类
端口号一般由IANA(Internet Assigned NumbersAuthority)

1、管理众所周知端口:

1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)知名端口号(已经分配给标准应用服务软件)如:
http协议用到的端口号 80
2、已登记端口:1024~49151

注册端口号(非标准应用服务软件的软件可以申请的端口号范围)

3、动态或私有端口://50000 以上的端口号
49152~65535 动态分配的端口号(系统动态分配给应用程序使用的)

注意

  • 区分进程用端口号
  • 已登记;要用的话,向组织申请一下
六、注意在编程中遇到的问题

一般不用上述的内容,我们用这个更具具体,因为那个没有IP

因为不同的主机,可能数据格式不一样,所以我们在此要求是大端模式;所以转换一下

因为我们的数据类型是32位无符号类型的,所以也需要用函数转成对应类型

 

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

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

相关文章

“决胜面试:高频题目与算法策略一览”

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

wps题注为表格或图片编号

word中为表格添加题注&#xff1a; 问题&#xff1a;多次或多人编辑导致--序号不能联动更新&#xff08;域代码不一致,如图&#xff09; 所以是否可以批量替换word里的域代码&#xff1f;如果可以这问题就解决了————失败 解决办法&#xff1a; 如图&#xff0c;复制表头&…

[数据集][目标检测]工程机械车辆检测数据集VOC+YOLO格式3189张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3189 标注数量(xml文件个数)&#xff1a;3189 标注数量(txt文件个数)&#xff1a;3189 标注…

万户 ezOFFICE receivefile_gd.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Thymeleaf+Bootstrap封装分页组件

效果 代码 templates/components/pagination.html <!doctype html> <html lang"zh-CN" xmlns:th"http://www.thymeleaf.org"> <body> <div class"d-flex justify-content-between align-items-center mb-3" th:fragment&…

Neo4j 图数据库入门

图形数据库存储节点和关系&#xff0c;而不是表或文档。数据的存储方式就像你在白板上勾画想法一样。您的数据存储不受预定义模型的限制&#xff0c;允许以非常灵活的方式考虑和使用它。 一、核心概念&#xff1a;属性图形模型 Neo4j使用属性图数据库模型。图数据结构由节点(离…

React错误:无法在‘node’上执行‘insertBefore‘:要在其前插入新节点的节点不是此节点的子节点

我在NextJS中用cloudinary实现了一个上传图片的页面&#xff0c;结果图片上传之后页面就无法点击操作&#xff0c;并在控制台报错&#xff1a; Failed to execute insertBefore on Node: The node before which the new node is to be inserted is not a child of this node. …

在 Arch Linux 上安装 Linux、Apache、MySQL、PHP(LAMP)堆栈的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 关于 LAMP LAMP 栈是一组用于启动和运行 Web 服务器的开源软件。该首字母缩略词代表 Linux、Apache、MySQL 和 PHP。Arch Linux 使用强…

【HTML】为网页添加列表和超链接

1、列表 1.1、无序列表 <ul><li>列表项1</li><li>列表项2</li><li>列表项3</li> ...... </ul>无序列表的常用type属性值 1.2、有序列表 <ol><li>列表项1</li><li>列表项2</li><li>列…

【乐吾乐大屏可视化组态编辑器】下载离线部署包

下载离线部署包/组件包 在线使用&#xff1a;https://v.le5le.com/ 导出为Zip文件 Zip包主要用于大屏可视化平台快捷导入导出项目。 如图下图所示&#xff0c;Zip包仅包含数据文件和图片文件&#xff0c;不包含js等依赖库。需要有一定开发能力者参考官方文档补充依赖库才能…

AndroidStudio最新版各个repositories下载失败

如下图&#xff0c;各个仓库都是下载失败&#xff0c;网络是有oversea的访问的&#xff0c;不行&#xff0c;我给AndroidStudio网络代理到oversea也不能下载&#xff0c;就很奇怪&#xff0c;就像是AndroidStudio强行把网络访问给墙了 原来Settings.Gradle的配置如下&#xff0…

[Algorithm][贪心][跳跃游戏][加油站][单调递增的数字][坏了的计算器]详细讲解

目录 1.跳跃游戏1.题目链接2.算法思路详解3.代码实现 2.加油站1.题目链接2.算法原理详解3.代码实现 3.单调递增的数字1.题目链接2.算法原理详解3.代码实现 4.坏了的计算器1.代码实现2.算法原理详解3.代码实现 1.跳跃游戏 1.题目链接 跳跃游戏 2.算法思路详解 贪心&#xff1…

【Python机器学习】NLP概述——词序和语法

词的顺序很重要&#xff0c;那些在词序列&#xff08;如句子&#xff09;中控制词序的规则被称为语言的语法&#xff08;也被称为文法&#xff09;。这是之前的词袋或词向量例子中所丢弃的信息。在大多数简短的短语甚至许多完整的句子中&#xff0c;上述词向量近似方法都可以奏…

数据结构——顺序栈和链式栈

目录 引言 栈的定义 栈的分类 栈的功能 栈的声明 1.顺序栈 2.链式栈 栈的功能实现 1.栈的初始化 (1)顺序栈 (2)链式栈 (3)复杂度分析 2.判断栈是否为空 (1)顺序栈 (2)链式栈 (3)复杂度分析 3.返回栈顶元素 (1)顺序栈 (2)链式栈 (3)复杂度分析 4.返回栈的大…

[数据集][目标检测]快递包裹检测数据集VOC+YOLO格式5382张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5382 标注数量(xml文件个数)&#xff1a;5382 标注数量(txt文件个数)&#xff1a;5382 标注…

【JavaSec】JavaIO流

0x04 IO流 文章目录 0x04 IO流创建文件读取文件信息文件目录操作删除创建目录 文件流操作读文件写文件write(byte[] b) 方法write(byte[] b, int off, int len) 方法 文件拷贝 向大佬致敬&#xff1a; https://drun1baby.top 创建文件 三种方法 一张图对比着看 其实感觉差别不…

C语言函数详解(上)【库函数】

目录 前言 一、函数的概念 二、库函数 1.标准库和头文件 2.库函数使用方式 3.如何通过以上的网站查看库函数信息 &#xff08;以sqrt为例&#xff09; 3.1 功能 3.2 头文件包含 3.3 库函数文档的⼀般格式 1. 函数原型 ​编辑2. 函数功能介绍 ​编辑3. 参数和返…

vue路由导航简单实现

1.代码 安装路由模块 npm install vue-router 导入路由组件&#xff1a; import { createRouter, createWebHistory } from vue-router 首先创建三个vue组件显示路由内容&#xff1a; index.vue <template><!-- 首页跳转 --><router-link to"/my"&…

Ciallo~(∠・ω・ )⌒☆第二十四篇 python 异常处理

在Python中&#xff0c;异常处理是一种处理代码中发生错误的机制。它允许我们在运行时捕获和处理异常&#xff0c;以避免程序终止并提供错误信息。 一、try-except语句 try块用于包含可能发生异常的代码&#xff0c;而except块用于捕获和处理异常。一旦try块中的代码引发了异常…

8月21日笔记

Frp Frp(Fast e Reverse ) Proxy) 是一款简单&#xff0c;好用&#xff0c;稳定的隧道工具。Frp 使用 Go语言开发&#xff0c;支持跨平台&#xff0c;仅需下载对应平台的二进制文件即可执行&#xff0c;没有额外依赖。它是一款高性能的反向代理应用&#xff0c;可以轻松地进行…