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

全部博文(142)

文章存档

2016年(10)

2015年(60)

2014年(72)

我的朋友

分类: C/C++

2014-12-25 18:04:10

#include
int semctl(int semid, int semnum, int cmd, ... /*union semun arg*/);
成功返回非负值,出错返回-1
参数semid标识其操作待控制的信号量集
参数semnum标识该信号量集内的某个成员,semnum值仅仅用于GETVAL/SETVAL/GETNCNT/GETZCNT/GETPID
system v支持下列cmd:
GETVAL ---把semval的当前值作为函数返回值返回。既然信号量绝不会是负数(semval被声明成一个整数unsigned short),那么成功的返回值总是非负数
SETVAL ---把semval值设置成为arg.val。如果操作成功,那么相应信号量在所有进程中的信号量调整值(semadj)将被置为0。
GETPID ---把sempid的当前值作为函数返回值返回
GETNCNT---把semncnt的当前值作为函数返回值返回
GETZCNT---把semzcnt的当前值作为函数返回值返回
GETALL----返回所指定信号量集内每个成员的semval值。这些值通过arg.array指针返回,函数本身的返回值则为0。注意,调用者必须分配一个unsigned short整数数组,该数组要足够容纳所指定信号量集内所有成员的semval值,然后把arg.array设置成指向这个数组。
SETALL----设置所指定信号量集中每个成员的semval值。这些值是通过arg.array指针指定的。
IPC_RMID--把由semid指定的信号量集从系统中删除掉。
IPC_SET---设置所指定信号量集的semid_ds结构中的以下三个成员:sem_perm.uid、sem_perm.gid和sem_perm.mode,这些值来自由arg.buf参数指向的结构中的相应成员。semid_ds结构中的sem_ctime成员也被设置成当前时间
IPC_STAT--(通过arg.buf参数)返回所指定信号量集当前的semid_ds结构。注意,调用者必须首先分配一个semid_ds结构,并把arg.buf设置成指向这个结构。
union semun {
int val;              /*used for SETVAL only*/
struct semid_ds *buf; /*used for IPC_SET and IPC_STAT*/
oshort *array;        /*used for GETALL and SETALL*/
struct seminfo  *__buf;  /* Buffer for IPC_INFO(Linux-specific) */
};


The semid_ds data structure is defined in as follows:


struct semid_ds {
   struct ipc_perm sem_perm;  /* Ownership and permissions */
   time_t          sem_otime; /* Last semop time */
   time_t          sem_ctime; /* Last change time */
   unsigned short  sem_nsems; /* No. of semaphores in set */
};


The ipc_perm structure is defined in as follows (the highlighted fields are settable
using 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 */
};
阅读(1268) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~