1.IPC通信
IPC 进程间通信方式:
共享内存是最高效的进程间通信方式
共享内存:
1.是一块,内核预留的空间
2.最高效的通信方式,避免了用户空间到内核空间的数据拷贝
IPC通信方式 ---操作流程类似的
操作:
(1)产生key值
#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_t key = ftok("/",'A');
返回值
成功 key值
失败 -1
(2)通过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
如:int shmid = shmget(key,1024,IPC_CREAT | 0666);
返回值:
成功 返回共享内存id,一般用shmid表示
失败 -1;
(3)共享内存 绑定
shmat
映射对象:shmat()
void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:将指定shmid对应的共享内存映射到本地内存。
参数:shmid 要映射的本地内存
shmaddr 本地可用的地址,如果不确定则用NULL,表示
由系统自动分配。
shmflg
0 , 表示读写
SHM_RDONLY, 只读
如:void*p = shmat(shmid,NULL,0);
返回值:
成功 返回映射的地址,一般等于shmaddr
失败 (void*)-1
(4)解除绑定(映射)
撤销映射:shmdt
int shmdt(const void *shmaddr);
功能:将本地内存与共享内存断开映射关系。
参数:shmaddr 要断开的映射地址。
返回值:成功 0
失败 -1;
(5)销毁IPC对象
删除对象:shmctl
int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control
功能:
修改共享内存属性,也可以删除指定的共享内存对象。
参数:shmid 要删除的共享内存对象
cmd
IPC_RMID 删除对象的宏
buff NULL 表示只删除对象。
如:shmdt(p);
返回值:成功 0
失败 -1
2.实现进程间通信同步
pause函数:pause();
在输入进程的循环中用kill(pid,SIGUSR1);
在接收进程中用signal(SIGUSR1,handler);
全局区定义空的handler,接收进程的接收循环中用pause();
3.网络通信
实现网络通信:
(1)物理层面 有一个 信息通路
有线,无线 ,5G,4G ,星链
(2)软件层面(逻辑层面) 也需要 一个通路
网络通信体系:
osi七层模型:
IP地址
是网络中主机的唯一标识,它由网络地址和主机号组成。网络地址是子网的唯一标识,类似于电话号码的区号;主机号是子网内每台主机的编号。在现在(IPv4)的网络中,IP地址是32bit的二进制数,采用大端字节序:
表示方法(点分十进制)
直接使用二进制数,不容易记忆,为了方便记忆,将32位二进制码划分为4个字节,每个字节转化成相应的十进制数,字节之间用“.”来分隔,这种表示方法,称之为“点分十进制表示法”。
例:192 .168 .1 .1
11000000 10101000 00000001 00000001
类型 | 范围 | 用途 | |
A类 | 0.x.x.x---127.x.x.x.x | 10.x.x.x | 私网(局域网)地址 |
127.x.x.x | 环回网络地址 | ||
其他 | 大型主干网地址 | ||
B类 | 128.x.x.x - 191.x.x.x | 172.16.x.x - 172.31.x.x | 私网(局域网)地址 |
169.254.x.x | 表示没有找到DHCP服务器 | ||
其他 | 主干(城市)网地址 | ||
C类 | 192.x.x.x - 223.x.x.x | 192.168.x.x | 私网(局域网)地址 |
D类 | 组播地址 | ||
E类 | 保留 |
子网掩码
获取IP地址中的网络地址和主机地址:
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数
据无误、数据无丢失、数据无失序、数据无重复到达的通信)
* 适用情况:
1. 适合于对传输质量要求较高,以及传输大量数据
的通信。
2. 在需要可靠数据传输的场合,通常使用TCP协议
3. QQ等即时通讯软件的用户登录账户管理相关
的功能通常采用TCP协议
tcp协议特点:
1. 面向连接 //类似打电话通话之前 ,必须先打通
2. 可靠传输 //保证数据准确可靠 (tcp协议机制 里面的功能 )
3. 面向字节流程
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。
在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
* 适用情况:
1. 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
2. 在接收到数据,给出应答较困难的网络中使用UDP。(如:无
线网络)
3. 适合于广播/组播式通信中。
4. MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通
讯通常采用UDP协议
5. 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP
方式进行实时数据传输
UDP特点: //广播
1.不可靠
2.无连接
3.数据报