曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6750|回复: 0
打印 上一主题 下一主题

[进程] semget | 创建或打开信号集

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-9-4 14:51:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Linux 下使用系统函数 semget 创建或打开信号集。这个函数定义在头文件<sys/sem.h> 中,函数原型如下:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg);

第 1 个参数 key 是经由 ftok() 得到的键值;
第 2 个参数 nsems 指明要创建的信号集包含的信号个数,如果只是打开信号集,则将 nsems 设置为 0 即可;
第 3 个参数 semflg 为操作标志,可以取如下值:
      IPC_CREATE : 调用 semget 时,它会将此值与系统中其他信号集的 key 进行对比,如果存在相同的 key ,说明信号集已存在,此时返回该信号值的标识符,否则创建一个新的信号集并返回其标识符。
      IPC_EXCL : 该宏必须和 IPC_CREATE 一起使用,否则没有意义。当 semflg 取 IPC_CREATE|IPC_EXCL 时,表示如果发现信号集已经存在,则返回错误,错误码为 EEXIST 。
如果 semget() 创建了新的信号量集,则信号量中将有 nsems 个信号量,并且与该信号量集关联的 semid_ds 结构如下初始化:
      sem_perm.cuid , sem_perm.uid , sem_perm.cgid 和 sem_perm.gid 成员被初始化为调用进程的有效用户  ID 和有效组 ID 。
      sem_nsems 成员被设置为 nsmes 的值。
      sem_otime 被设置为 0 。
      sem_ctime 被设置为当前时间。
注意,semget() 并没有初始化信号量集中的信号量的实际值,要初始化信号量的实际值必须改用 semctl() 函数。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-6 10:27 , Processed in 0.086603 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表