医院网站建设细节,自己做店招的网站,淘宝官网首页登录入口电脑,工商网站注册公司IPC通信方式#xff1a;
一、共享内存 system v #xff1a; 共享内存
是一块#xff0c;内核预留的空间 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝) 二、IPC对象操作通用框架#xff1a; key值 申请 》读写 》关闭 》卸载 1.ftok函数#xff1a;…IPC通信方式
一、共享内存 system v 共享内存
是一块内核预留的空间 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝) 二、IPC对象操作通用框架 key值 申请 》读写 》关闭 》卸载 1.ftok函数 产生key值 key_t ftok(const char *pathname, int proj_id); 1功能将pathname 和 proj_id 转换为 key值 2参数pathname给一个路径名 proj_id工程id eg: A 3返回值成功 key值失败 -1
key_t key ftok(/,A);if (key 0){perror(ftok fail);return -1;}printf(key %d\n,key);
2.shmget函数 通过key获取ipc对象 (共享内存) int shmget(key_t key, size_t size, int shmflg); 1功能使用唯一键值key向内核提出共享内存使用申请 2参数key唯一键值size 要申请的共享内存大小shmflg 申请的共享内存访问权限八进制表示如果是第一个申请则用IPC_CREAT如果要检测是否存在用IPC_EXCL 3返回值成功 返回共享内存id一般用shmid表示失败 -1
int shmid shmget(key,1024,IPC_CREAT|0666);if (shmid 0){perror(shmget fail);return -1;}printf(shmid %d\n,shmid);
3.shmat函数 共享内存 绑定 void *shmat(int shmid, const void *shmaddr, int shmflg); 1功能将指定shmid对应的共享内存映射到本地内存。 2参数shmid要映射的本地内存shmaddr本地可用的地址如果不确定则用NULL表示由系统自动分配shmflg0 表示读写SHM_RDONLY只读 3返回值成功 返回映射的地址一般等于shmaddr失败 (void*)-1
void *p shmat(shmid,NULL,0);if(p (void *)-1){perror(shmid fail);return -1;}signal(SIGUSR1,handler);pid_t *q (pid_t *)p;*q getpid();char *s (char *)p;while(1){printf(s %s\n,s);if(strncmp(s,quit,4) 0){break;}paus
4.shmdt函数 解除绑定(映射) int shmdt(const void *shmaddr); 1功能将本地内存与共享内存断开映射关系。 2参数shmaddr 要断开的映射地址。 3返回值成功 0失败 -1
if(shmdt(p) 0){perror(shmdt fail);return -1;}
5.shmctl函数 销毁IPC对象 int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl control 1功能修改共享内存属性也可以删除指定的共享内存对象。 2参数shmid 要删除的共享内存对象cmd IPC_RMID 删除对象的宏buff NULL 表示只删除对象。 3返回值成功 0 失败 -1 if(shmctl(shmid,IPC_RMID,NULL) 0){perror(shmctl fail);return -1;}练习
二、消息队列 消息队列是一旦创建则会一直存在。除非关机或者自己在程序中做删除或者通过命令的方式(ipcrm)显式的来删除消息队列可以实现对不同类型的消息的收发那么这些类型的消息是放在同一个消息队列中的接收方可以学着接受哪种类型的消息
三、信号量集 信号灯的出现主要是为了解决多任务程序并发执行时对资源的访问出现的竞争同步的问题。信号量最初是对资源的一种抽象和模拟最初的信号量(整型信号量)就是通过一个数值来表示某种资源的个数在你这个抽象的基础上他的发明者Dijkstra(迪杰斯塔拉)为其制定了两个原子性(一次性执行完的不可被中断的)的操作P操作(passeren申请通过)V操作vrijgeven释放)来实现对互斥资源的访问后来处于对(1).多个临界资源的访问(2)和资源使用数量的限制(在有些情况下当资源数量低于某一下限值时便不予分配).信号量的概念得到进一步发展形成了所谓的”信号灯集”.