当前位置: 首页 > news >正文

怎么样签约设计网站海燕网站建设公司

怎么样签约设计网站,海燕网站建设公司,朝阳区seo,国外h5网站模板下面是有关进程通信中 System V 的相关介绍#xff0c;希望对你有所帮助#xff01; 小海编程心语录-CSDN博客 目录 1. System V IPC 1. 消息队列 msg 消息队列的使用方法 1.1 消息队列的创建 1.2 向消息队列发送消息 1.3 从消息队列接收消息 1.4 使用msgctl函数显式地… 下面是有关进程通信中 System V 的相关介绍希望对你有所帮助 小海编程心语录-CSDN博客 目录 1. System V IPC 1. 消息队列 msg 消息队列的使用方法 1.1 消息队列的创建 1.2 向消息队列发送消息 1.3 从消息队列接收消息 1.4 使用msgctl函数显式地删除MSG对象 2.共享内存 shm 使用共享内存的一般步骤 2.1 创建或打开SHM 2.2 获取共享内存地址 2.3 解除映射 2.4 共享内存控制函数 3. 信号量 sem 3.1 基本概念 3.2 P/V操作 3.3 核心API及实现步骤 1. System V IPC System V IPC包括消息队列、共享内存、信号量,V 是罗马数字 5是 Unix 的ATT 分支的其中一个版本一般习惯称呼他们为IPC对象这些对象的操作接口都比较类似在系统中他们都使用一种叫做 key 的键值来唯一标识而且他们都是“持续性”资源--即他们被创建之后不会因为进程的退出而消失而会持续地存在除非调用特殊的函数或者命令删除他们。 它们有如下共同的特性 在系统中使用所谓键值KEY来唯一确定类似于文件系统中的文件路径 当某个进程创建或打开一个IPC对象时将会获得一个整型ID类似于文件描述符 IPC对象属于系统而不是进程因此在没有明确删除操作的情况下IPC对象不会因为进程的退出而消失 - 查看IPC对象 ipcs -q/m/s/a- 删除IPC对象 ipcrm -Q key : 删除指定的消息队列 ipcrm -q id : 删除指定的消息队列ipcrm -M key : 删除指定的共享内存 ipcrm -m id 删除指定的共享内存ipcrm -S key : 删除指定的信号量 ipcrm -s id 删除指定的信号量 1. 消息队列 msg 消息队列可以认为是一个消息列表。消息队列提供一种带有数据标识的特殊管道,使得每一段被写入的数据都变成带标识的消息读取该段消息的进程只要指定这个标识就可以正确地读取而不会受到其他消息的干扰从运行效果来看一个带标识的消息队列就像多条并存的管道一样。 消息队列实现了对消息发送方和消息接收方的解耦一个进程在往一个消息队列中写入消息之前不需要有某个进程在该队列上等待消息到达。使得双方可以异步处理消息数据这一特点对分布式环境特别有用。 消息队列的使用方法 1.发送者: A)获取消息队列的 ID号 先获取key值(ftok)再用 msgget 获取ID号 int msgid; msgid msgget(ftok(., 1), IPC_CREAT|0666); B)将数据放入一个附带有标识的特殊的结构体发送给消息队列。  struct msgbuf {// 消息类型固定long mtype;// 消息正文可变// ... }; 2.接收者: A)获取消息队列的 ID号 B)将指定标识的消息读出。 当发送者和接收者都不再使用消息队列时及时删除它以释放系统资源。 msgctl 1.1 消息队列的创建 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/msg.hint msgget(key_t key, int msgflg); key:键值全局唯一标识可由ftok()产生msgflg:操作模式与读写权限与文件操作函数open类似同时也可以指定权限取值为         IPC_CREAT:用来创建一个消息队列         IPC_EXCL:查询由key指定的消息队列释放存在         IPC_NOWAIT:之后的消息队列操作都为非阻塞返回值消息队列MSG对象ID 1.2 向消息队列发送消息 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/msg.hint msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); msgqidMSG对象的ID由msgget()获取。 msgp一个指向等待被发送的消息的指针 msgsz:消息正文的长度单位字节注意不含类型长度msgflg:发送选项一般有         0:默认发送模式在MSG缓冲区已满的情形下阻塞直到缓冲区变为可用状态         IPC_NOWAIT:非阻塞读写模式在MSG缓冲区已满的情形下直接退出函数并设置错误码为EAGAIN 1.3 从消息队列接收消息 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/msg.hssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); msgqid:MSG对象的D,由msgget(0获取msgp:存放消息的内存入口msgsz:存放消息的内存大小Nmsgtyp:欲接收消息的类型前后要一致         0:不区分类型直接读取MSG中的第一个消息         大于0读取类型为指定msgtypl的第一个消息         小于0读取类型小于等于msgtyp绝对值的第一个具有最小类型的消息。例如当MSG对象中有类型为3、1、5类型消息若干条当msgtyp为-3时类型为1的第一个消息将被读取msgflg:接收选项         0:默认接收模式在MSG中无指定类型消息时阻塞         IPC_ NOWAIT:非阻塞接收模式在MSG中无指定类型消息时直接退出函数并设置错误码为ENOMSG         MSG_EXCEPT:读取除msgtyp之外的第一个消息         MSG_NOERROR:如果待读取的消息尺寸比nsgsz,大直接切割消息并返回msgsz部分读不下的部分直接丢弃。 若没有设置该项则函数将出错返回并设置错误码为E2BG  1.4 使用msgctl函数显式地删除MSG对象 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/msg.hint msgctl(int msgid, int cmd, struct msqid_ds *buf); msqid:MSG对象IDcmd:控制命令字         IPC_STAT:获取该MSG的信息储存在结构体msqid ds中         IPC_SET:设置该MSG的信息储存在结构体msqid ds         IPC_RMID立即删除该MSG,并且唤醒所有阻塞在该MSG上的进程同时忽略第三个参数 2.共享内存 shm 共享内存是通过不同进程共享一段相同的内存来达到通信的目的共享内存是众多IPC方式最高效的一种方式一般情况下共享内存是不能单独使用的需要配合诸如互斥锁、信号量等协同机制使用 像上图所示当进程 P1 向其虚拟内存中的区域1写入数据时,进程2就能同时在其虚拟内存空间的区域2看见这些数据中间没有经过任何的转发效率极高。 使用共享内存的一般步骤 创建ipc系统唯一标识key - ftok创建共享内存 - shmget映射共享内存 - shmat共享内存读写解除共享内存映射 - shmdt删除共享内存 - shmctl 2.1 创建或打开SHM //函数原型 #include sys/ipc.h #include sys/shm.hint shmget(key_t key, size_t size, int shmflg);key:SHM对象键值size:共享内存大小shmflg:创建模式和权限         IPC_CREAT:如果ky对应的共享内存不存在则创建SHM对象         IPC_EXCL:如果该ky对应的共享内存已存在则报错         权限与文件创建open类似用八进制表示         SHM HUGETLB返回值SHM对象ID  2.2 获取共享内存地址 函数shmat()用来获取共享内存的地址,获取共享内存成功后,可以像使用通用内存一样对其进行读写操作。 //函数原型 #include sys/types.h #include sys/shm.hvoid *shmat (int shmid, const void *shmaddr, int shmflg); shmid:指定的共享内存的IDshmaddr:指定映射后的地址因为是虚拟地址分配的原则要兼顾诸如段对齐、权限分配等问题因此用户进程是无法指定的只能由系统自动分配因此此参数一般为NU儿L,表示交由系统来自动分配shmflg:可选项         0:默认代表共享内存可读可写         SHM_RDONLY:代表共享内存只读返回值共享内存映射后的虚拟地址入口  2.3 解除映射 //函数原型 #include sys/types.h #include sys/shm.hint shmdt(const void *shmaddr); 使用完SHM对象后需要将其跟进程解除关联关系即解除映射 2.4 共享内存控制函数 //函数原型 #include sys/types.h #include sys/shm.hint shmctl(int shmid, int cmd, struct shmid ds *buf); 删除SHM对象释放内存 shmid:指定的共享内存的IDcmd:一些命令字         IPC_STAT:获取共享内存的一些信息放入shmid_ds{.}中         IPC_SET:将buf中指定的信息设置到本共享内存中         IPC_RMID:删除指定的共享内存此时第三个参数buf将被忽略buf:用来存放共享内存信息的结构体  3. 信号量 sem 信号量SEM全称Semaphore中文也翻译为信号灯作为Systemc-V IPC其中一种信号量与消息队列MSG和共享内存SHM有极大的不同SEM不是用来传输数据的而是用来协调进程或者线程工作的像是一种旗语。 Linux 中用到的信号量有3种:ststem-V 信号量、POSIX有名信号量和 POSIX无名信号量。他们虽然有很多显著不同的地方但是最基本的功能室一致的:用来表征一种资源的数量当多个进程或者线程争夺这些稀缺资源的时候信号量用来保证他们合理地、秩序地使用这些资源而不会陷入逻辑谬误之中。信号量机制是一种有效的进程同步和互斥工具 3.1 基本概念 临界资源Critical Resources多个进程或线程有可能同时访问的资源临界区critical zone访问这些资源的代码称为临界代码这些代码区域称为临界区P操作程序进入临界区之前必须对资源进行申请这个动作称为P操作V操作程序离开临界区之后必须释放相应的资源这个动作称为V操作 3.2 P/V操作 PV操作就是荷兰语Passeren通过Vrijgeven释放的简称。对应的就是 wait 等待signal 释放操作。 P操作SS-1,若S≥0进程继续执行若S0,进程暂停执行进入等待队列。即执行P操作时有可用资源则继续执行无可用资源测等待。 V操作SS1,若S0进程继续执行若S≤0,唤醒等待队列中的一个进程。即执行V操作时无等待进程则继续执行有等待进程则唤醒该进程然后本进程继续执行。 进程的互斥指当一个进程进入临界区使用临界资源时需要使用临界资源的其他进程必须等待。退出临界区后需要使用该临界资源的进程解除阻塞。互斥是进程之间的间接制约关系 设置信号量初值为0如果进程A先执行到L1执行P操作后信号量小于0A等待直到进程B执行到L2执行V操作后信号量为0唤醒A继续执行。 如果进程B先执行到L2(信号量1)则进程A无需等待直接就可以执行完。这样就实现了通过信号量控制进程的同步 3.3 核心API及实现步骤 获取共享内存key值 ftok获取共享内存ID号 shmget共享内存映射 shmat获取信号量key值 ftok获取信号量ID semget初始化信号量的值 semctl信号量的P/V操作 1申请key值。 key ftok(.,10); 2根据key值申请信号量ID号。 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/sem.hint semget(key_t key, int nsems, int semflg); key 信号量的key值 nsems: 信号量元素的个数。例如 时间空间 - 2 semflg: IPC_CREAT|0666 - 不存在则创建 返回值         成功 信号量ID         失败 -1 3控制/设置 信号量值参数。 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/sem.hint semctl(int semid, int semnum, int cmd, ...); semid信号量ID semnum需要操作的成员的下标 时间:0 空间:1 cmd:         SETVAL      - 用于设置信号量的起始值         IPC_RMID     - 删除信号量的ID ... : 空间/数据的起始值 返回值         成功0         失败-1 例如 想设置空间的起始值为1数据的起始值为0 semctl(semid,0,SETVAL,1); semctl(semid,1,SETVAL,0); 4如何实现信号量的P/V操作 P操作 1-0 V操作 0-1 //函数原型 #include sys/types.h #include sys/ipc.h #include sys/sem.hint semop(int semid, struct sembuf *sops, size_t nsops); semid: 信号量ID号 sops进行P/V操作结构体 nsops: 信号量操作结构体的个数 - 1 返回值         成功0         失败-1 //sops进行P/V操作结构体 struct sembuf {unsigned short sem_num; //需要操作的成员的下标 时间:0 空间:1short sem_op; //P操作/V操作 P -1 V: 1short sem_flg; //普通属性填0. } 上面是有关进程通信中 System V IPC 的相关介绍下篇博客会给出一些示例代码 如果喜欢请不吝给予三连支持 小海编程心语录-CSDN博客
http://www.zqtcl.cn/news/629853/

相关文章:

  • 做体育的网站c2c跨境电商平台有哪些?
  • 山西响应式网站建设推荐全国企业信用信息公示系统浙江
  • 西安做网站维护的公司百度百科官网入口
  • 网站网站建设公司贵阳网站设计阳光创信好吗
  • 网站广告投放收费标准长沙公司制作网站费用
  • 网站建设有哪些环节做一个产品网站要多少钱
  • 公司网站建设价格河北网站制作 网站开发
  • 适合新手做的网站项目职业技术培训
  • 提高网站流量原则昆山做百度网站
  • 怎样设计自己的网站长春制作门户网站的公司
  • 亚马逊商标备案是否必须做网站Wordpress做APP后端
  • 主办单位性质与网站名称不符网站域名怎么买
  • 帝国cms下载类网站怎么做广州外贸营销网站建设公司
  • 网站开发软件开发流程免费做外贸的网站平台有哪些
  • 教育培训网站开发广告公司怎么设置网站关键字
  • 绩溪建设银行网站济南网站建设 刘彬彬
  • 网站开发是打代码吗建网站来做什么
  • 制作网站需要什么软件wordpress建站程序
  • 做网站网站怎么赚钱软件工程师证书报考时间
  • 手机和电脑网站分开做炒股软件下载
  • 网站建设需要注意哪些关键细节杭州做商务网站
  • 做网站,图片显示不出来网站图标代码
  • 理财网网站开发源码h5淘宝网网页版入口
  • 免费网站商城模板宁波企业网站搭建图片
  • 上海网站备案查询建站图标素材
  • 贵州省住房和建设厅网网站网站页面设计报告
  • 做网站友汇网快速建设网站视频教程
  • 物流公司做网站注重什么官网的网站设计公司
  • 网站备案 2016电子商务平台起名
  • 济南建站详情房地产市场分析