Linux系统环境进程间通信:信号灯(2)

文章作者 100test 发表时间 2007:03:14 16:38:19
来源 100Test.Com百考试题网


四、操作信号灯

对消息队列的操作无非有下面三种类型:

1、 打开或创建信号灯

与消息队列的创建及打开基本相同,不再详述。

2、 信号灯值操作

linux可以增加或减小信号灯的值,相应于对共享资源的释放和占有。具体参见后面的semop系统调用。

3、 获得或设置信号灯属性:

系统中的每一个信号灯集都对应一个struct sem_array结构,该结构记录了信号灯集的各种信息,存在于系统空间。为了设置、获得该信号灯集的各种信息及属性,在用户空间有一个重要的联合结构与之对应,即union semun。

联合semun数据结构各成员意义参见附录2

信号灯API

1、文件名到键值#include

#include 

key_t ftok (char*pathname, char proj);

它返回与路径pathname相对应的一个键值,具体用法请参考《Linux环境进程间通信(三):消息队列》。

2、 linux特有的ipc()调用:

int ipc(unsigned int call, int first, int second, int third, void *ptr, long fifth).

参数call取不同值时,对应信号灯的三个系统调用:

当call为SEMOP时,对应int semop(int semid, struct sembuf *sops, unsigned nsops)调用;

当call为SEMGET时,对应int semget(key_t key, int nsems, int semflg)调用;

当call为SEMCTL时,对应int semctl(int semid,int semnum,int cmd,union semun arg)调用;

这些调用将在后面阐述。

注:本人不主张采用系统调用ipc(),而更倾向于采用系统V或者POSIX进程间通信API。原因已在Linux环境进程间通信(三):消息队列中给出。

3、系统V信号灯API

系统V消息队列API只有三个,使用时需要包括几个头文件:

#include 

#include 

#include 

1)int semget(key_t key, int nsems, int semflg)


相关文章


Linux系统环境进程间通信:信号灯(1)
Linux操作系统笔记本电池使用技巧(2)
Linux系统环境进程间通信:信号灯(2)
Linux操作系统下文件系统的比较和选择
Linux操作系统笔记本电池使用技巧(1)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛