IPC 进程间通信方式
共享内存 //最高效的进程间通信方式
共享内存:
1.是一块 内核预留的空间
2.最高效的通信方式
//避免了用户空间到内核空间的数据拷贝
操作:
system v:共享内存
IPC对象操作通用框架:
1.key值的产生:
ftok
将pathname和proj_id 转换为key值
参数:
pathname //给一个路径名
proj_id //工程id eg:‘A’
返回值:
成功 返回key值
失败 返回-1
2.通过key获取ipc对象(共享)
shmget
使用唯一键值key向内核一处共享内存使用申请
参数:
key 唯一键值
size 要申请的共享内存大小
shmflg 申请的共享内存访问权限,八进制表示
返回值:
成功 返回共享内存id
失败 返回-1
3.绑定地址空间
shmat
将指定的shmid对应的共享内存映射到本地内存
参数:
shmid 要映射的本地内存1
shmaddr 本地可用的地址,如果不确定则用NULL,表示由系统自动分配
shmflg 0, 表示读写
SHM_RDONLY 只读
返回值:
成功 返回映射的地址,一般等于shmaddr
失败 返回(void *)-1
pause
等待一个信号
4.解除绑定
shmdt
将本地内存与共享内存断开映射关系
参数:
shmaddr 要断开的映射地址
返回值:
成功 返回0
失败 返回-1
5.销毁IPC对象
shmctl
修改共享内存属性,也可以删除指定的共享内存对象
参数:
shmid 要删除的共享内存对象
cmd IPC_RMID 删除对象的宏
buff NULL 表示只删除对象
返回值:
成功 返回0
失败 返回-1
总结:
1、共享内存数据的存储方式是拷贝还是剪切?
拷贝
2、共享内存的数据如果措辞不同进程读写会怎么样?
同一操作对象,数据没有偏移情况下会覆盖
IPC对象 --- 共享内存
消息队列 信号量集
网络通信
网络: 不同主机间的通信问题
实现网络通信:
1.物理层面 有一个信息通路
有线
无线 5G 4G 星链
2.软件层面(逻辑层面) 也需要一个通路
网络编程:
Open System Interconnect(OSI网络模型)
为了解决不同体系结构的网络的互联问题,忘记标准化组织ISO 于1981年制定了开放系统互联参考模型
Open System Interconnection Reference Model, OSI/RM
osi七层协议:
1、物理层
规定了物理层面的电气特征及相关的机械特性
物理层面数据的传输 --- 一位的二进制数据 //比特流
2、数据链路层
规定了传输数据的格式 //(一)帧数据
//控制传输过程可靠
3、网络层(网际层)
用于解决网络与网络之间数据传输 //数据包
4、传输层
传输控制层,控制传输过程,保证数据完整和可靠
5、会话层
处理一次会话过程
6、表示层
规定了 传输数据的格式和方式
7、应用层
就是直接获取要收发的数据
实际应用到的是 tcp/ip 模型:
应用层
传输层
网络层
数据链路层
4层模型:
应用层
传输层
网络层
网络接口层
每个层次中,都有自己的一套规范 --- 协议
操作系体角度:
IP
用来标识网络中的一台主机 --- 通过ip可以找到对应一台主机
本质:32位整型数值
表示方式 点分十进制 0 - 255
ip地址的组成:网络号 + 主机号
网络号 --- 表示所处的网络
主机号 --- 表示能容纳的主机
端口号
用来表示主机中某一个具体(进行网络通信)进程
ip + 端口号 //进程在网络的地址
网络编程:
tcp / udp
TCP:
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
适用情况:
1、适合于对传输质量要求较高,以及传输大量数据的通信。
2、在需要可靠数据传输的场合,通常使用TCP协议
3、MSN/QQ 等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
TCP协议特点:
1.面向链接 //类似打电话之前,必须先打通
2.可靠传输 //保证数据准确可靠(tcp协议机制里面的功能)
3.面向字节流
UDP:
用户数据报协议,是不可靠的无连接的协议。
在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
适用情况:
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
程序向内核提出创建一个基于内存的套接字描述符
sendto
man 7 ip
man inet_addr
端口号:
htons
转换大小端(网络传输统一用大端)