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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Linux进程通信的所有评论