一、进程间通讯方式IPC
是最有效的进程间通讯方式
流程:key值=>申请=>读写=>关闭=>卸载
(1)key_t ftok(const char *pathname,int proj_id);
功能:将pathname和proj_id转换为key值
参数1:路径名
参数2:工程id
返回值:
成功返回key值,失败返回-1;
(2)通过key值获得IPC对象
shmget(key_t key,size_t size,int shmflg)
参数1:唯一键值
参数2:申请的共享内存访问权限,八进制表示
如果是第一个申请,用IPC_CREAT
如果要检测是否存在,用IPC_EXCL
返回值:成功 返回共享内存id,一般用shmid表示,失败 -1;
(3)共享内存 绑定
映射对象:shmat()
void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:将指定shmid对应的共享内存映射到本地内存。
参数:shmid 要映射的本地内存
shmaddr 本地可用的地址,如果不确定则用NULL,表示由系统自动分配。
shmflg
0 , 表示读写
SHM_RDONLY, 只读
返回值:
成功 返回映射的地址,一般等于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 表示只删除对象。
返回值:成功 0,失败 -1
二、osi参考模型
1. 物理层
规定了物理层面的电气特性
及相关机械特性
物理层面数据的传输 --- 一位一位二进制数据 //比特流
2. 数据链路层
规定了 传输数据的格式 //帧数据
//控制传输过程可靠
3. 网络层 (网际层)
用于解决 网络 与 网络之间 数据传输 //数据包
4. 传输层
传输控制层,控制传输过程,保证数据完整和可靠
5. 会话层
处理一次会话过程
6. 表示层
规定了 传输数据的格式 和 方式 //加密
7. 应用层
就是直接获取要收发的数据
三、IP和端口
(1)IP
本质:32位(4进制)整型数值。<表示:点分十进制>
一进制的范围:0~255。
组成:网络号(表示所处的网络) + 主机号(表示能容纳的主机)
分类:A类(0.x.x.x~127.x.x.x),B类(128.x.x.x~192.x.x.x),C类(192.x.x.x~223.x.x.x),D类(组播地址),E类(保留)
注:(1)主机号为0的IP地址是网络地址,主机号为255的地址是广播地址。
(2)子网掩码(255.255.255.0):与IP地址相与,结果判断是否在同一网络下。
(2)端口号
本质:16位数值(2字节)
分类:①众所周知端口:1~1023(1~255间为众所周知端口;256~1023端口通常由UNIX系统占用)
知名端口号(已经分配给标准应用服务软件)。
eg:http协议用到端口号80.
②已登记端口:1024~49151
注册端口号(非标准应用服务软件可申请)。
③动态或私有端口:49152~65535
动态分配的端口号(系统动态分配给应用程序使用)。
// 50000以上端口号
四、编程
TCP/UDP:TCP协议<高可靠>特点——①面向连接 ②可靠传输(tcp协议机制里面的功能)。 //打电话
UDP协议<高效率>特点:①不可靠传输 ②无连接 ③数据报。 //广播
编程模型:①c/s(client server)——客户端-服务器模型;
②b/s(browser server) ——浏览器-服务器模型。
UDP
socket
int socket(int domain(通信范围) , int type , int protocol)
功能:程序向内核提出创建一个基于内存的套接字描述符。
参数:
domain:协议簇;当为AF_INET表示基于IPV4协议。
type:SOCK_STREAM——通常指TCP;
SOCK_DGRAM——数据报套接字(通常指UDP)。
protocol:0默认。
一种特殊的文件<专门用于网络通信
socket接口函数,提供了一个可访问操作系统网络功能的接口。
sendto
ssize_t sendto(int sockfd) , const void *buf , size_t len , int flags , const struct sockaddr *dest_addr , socklen_t addrlen)
参数1:用于通信的socket对应的fd
参数2:发送数据所在空间
参数3:发送字节数
参数4:0,默认
参数5:目的地址
参数6:目的地址长度
返回值:成功:发送出去的字节数;失败:-1。