Chinaunix首页 | 论坛 | 博客
  • 博客访问: 325450
  • 博文数量: 142
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1452
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 16:28
文章分类

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-12-26 16:21:38

sysetm v 信号量集结构
struct semid_ds {
struct ipc_perm sem_perm;  /*信号量的访问权限结构*/
struct sem *sem_base;      /*指向信号量集的指针*/
ushort     sem_nsems;      /*信号量集中的信号量个数*/
time_t     sem_otime; /*time of last semop()*/
time_t     sem_ctime;      /*time of creation or last IPC SET*/
};


struct ipc_perm {
   key_t          __key; /* Key supplied to semget(2) */
   uid_t          uid;   /* Effective UID of owner */
   gid_t          gid;   /* Effective GID of owner */
   uid_t          cuid;  /* Effective UID of creator */
   gid_t          cgid;  /* Effective GID of creator */
   unsigned short mode;  /* Permissions */
   unsigned short __seq; /* Sequence number */
};


struct sem {
ushort_t semval;     /*信号量的值,非负值*/
short    sempid;     /*最后成功操作semop的进程ID*/
ushort_t semncnt;    /*等待semval大于当前值的计数*/
ushort_t semzcnt;    /*等待semval等于0的计数*/
};
#include
int semget(key_t key, int nsems; int oflag);
返回值:成功则返回非负的信号量标识符,出错则返回-1.
nsems参数指定了集合中的信号量数目。如果我们不创建一个新的信号量集,而只是访问一个已存在的集合,那就可以把该参数指定为0.一旦创建完一个信号量集,我们就不能改变其中的信号量数。
oflag是SEM_R,SEM_A的组合,还可以与IPC_CREAT/IPC_CREAT|IPC_EXCL按位或。

当实际创建一个新的信号量集时,相应的semid_ds结构的以下成员将被初始化。
1)sem_perm结构中的uid和cuid成员被设置为调用进程的有效用户ID,gid和cgid成员被置为调用进程的有效组ID。
2)oflag参数中的读写权限位存入sem_perm.mode
3)sem_otime被设置为0,sem_ctime被设置为当前时间
4)sem_nsems被设置为nsems参数的值
5)与该集合中每个信号量关联的各个sem结构并不初始化。这些结构是在以SET_VAL或SETALL命令调用semctl是初始化的。
阅读(434) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~