快速业务通道

Linux进程通信

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-01
m V中的信号量实际上是信号量的集合(Set), 它可以包含多个信号量,控制多个共享资源. //数据结构 4.1 sem : 信号量对象实际是多个信号量的集合.数组的每个成员都是一个单独的信号量. 以sem结构的形式存储的. linux/sem.h 4.2 semun : 联合在senctl()使用, 提供senctl()操作所需要的信息. linux/sem.h 4.3 sembuf : 被semop()函数用来定义信号量对象的基本操作. linux/sem.h struct sembuf{ unsigned short sem_num; //决定在信号量上的操作,正,负,零 //sem_op是0, 那么调用semop()函数的进程就会被阻塞直到对应的信号量值为零. //这种操作的实质就是等待信号量所监控的资源被全部使用. short sem_op; short sem_flg; } 4.4 semid_qs: 和msgqid_ds类似, semid_qs结构被系统用来储存每个信号量对象的有关信息. //有关的函数 4.a semget(); 建立新的信号量对象或者获取已有对象的标识符. linux/sem.h int semget(key_t key, int nsems, int semflg); 4.b semop(); 用来改变信号量对象中各个信号了的状态. int semop(int semid, struct sembuf* sops, unsigned nsops); //操作序列 struct sembuf sem_get = {0, -1, IPC_NOWAIT}; if((semop(sid, &sem_get, 1)==-1) perror("semop"); struct sembuf sem_release = {0, 1, IPC_NOWAIT}; semop(sid, &sem_release,1); 4.c semctl() 直接对信号量对象进行控制. int semctl(int semid, int semnum, int cmd, union semun arg); ///////////////////信号量的实例--semtool,交互式信号量的使用/[P109]//////////// //////////////////********共享内存*********////////////////////////// 简单说: 就是被多个进程共享的内存. 它在各种进程通信方法中式最快的. 它是将信息直接映射到内存中, 省去了其他IPC方法的中间步骤. //数据结构 1. shmid_ds //有关函数 1. int shmget(key_t key, int size, int shmflg); --linux/shm.h 2. int shmat(int shmid, char* shmaddr, int shmflg);--将共享内存映射到进程自己的内存空间内. 3. int shmctl(int shmqid, int cmd, struct shmid_ds* buf); 4. int shmdt(char* shmaddr); //当一个进程不再需要某个共享内存的映射时,就应该使用shmdt()函数断开映射. ///////////共享内存应用举例--shmtool 拥有帝国一切,皆有可能。欢迎访问phome.net

本文出自 “咖啡时间” 博客,请务必保留此出处http://tuoxie174.blog.51cto.com/1446064/413195

拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号