1.共享内存
共享内存(Shared Memory)是一种进程间通信(Inter-Process Communication, IPC)机制,允许多个进程共享同一段内存区域。它是实现进程间高效数据交换的一种方式。
1.共享内存的特点
高效性、同步机制、内存映射、系统资源、跨进程访问、内存管理、灵活性、安全性。
2.共享内存的原理
1.内存映射 2.操作系统支持 3.同步机制 4.生命周期管理
3、申请对象:shmget()
功能: 使用唯一键值key向内核提出共享内存使用申请
参数:key 唯一键值
size 要申请的共享内存大小
shmflg 申请的共享内存访问权限,八进制表示,如果是第一个申请,则用IPCCREAT,如 果要检测是否存在,用IPCEXCL
返回值:
成功 返回共享内存id 失败 -1
shmat() //将指定shmid对应的共享内存映射到本地内存。
shmdt() //将本地内存与共享内存断开映射关系.
shmctl() // 修改共享内存属性,也可以删除指定的共享内存对象。
#include<stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include<sys/shm.h>
#include<signal.h>
#include<string.h>
int main(int argc,char *argv[])
{
key_t key = ftok("/",'B');
if(-1 == key)
{
perror("ftok fail");
return -1;
}
printf("key = %d\n",key);
int shmid = shmget(key,1024,IPC_CREAT|0666);
if(-1 == shmid)
{
perror("shmget fail");
return -1;
}
printf("shmid = %d\n",shmid);
void *p = shmat(shmid,NULL,0);
if(p == (void *) -1)
{
perror("shmat fail");
return -1;
}
int *q = p;
pid_t pid = *q;
while(1)
{
char *s = p;
fgets(s,sizeof(s),stdin);
kill(pid,SIGUSR1);
if(strncmp(s,"quit",4) == 0)
{
break;
}
}
if(shmdt(p) < 0)
{
perror("shmdt fail");
return -1;
}
if(shmctl(shmid,IPC_RMID,NULL) < 0)
{
perror("shmctl fail");
return -1;
}
return 0;
}
2.tcp 特点 可靠性 有连接
udp 特点 高效性 无连接
osi参考模型
IP //用来标识网络中的一台主句 ---- 通过ip可以找到对应一台主机
端口号 //用来表示主机中某一个具体(进行网络通信)进程
ip地址的组成:
网络号 + 主机号
网络号 ---表示所处的网络
主机号 ---表示能容纳的主机
socket //1.一种特殊的文件 --- 专门用于网络通信(不同主机间的进程)
socket() //程序向内核提出创建一个基于内存的套接字描述符
sendto() //发送数据
端口号: tcp 和udp 的端口号是独立的
(1)
作用:唯一的标识一个进程
每一个应用程序进程有一个端口号,
通讯时区分数据包属于哪个应用程序进程
recvfrom() 接收数据
bind() :如果该函数在服务器端调用,则表示将参数1相关的文件描述符文件与参数2 指定的接口地址关联,用于从该接口接受数据。
tcp 客户端:
1.建立连接
socket
connect //该函数固定有客户端使用,表示从当前主机向目标 主机发起链接请求。
....
2.通信过程
read
write
close
tcp服务器:
1.建立连接
socket
bind
listen //监听 客户端的连接请求
accept //接听 ---这一步完成之后 连接就建立好了,之后就可以收发数据
.....
2.通信过程
read
write
close