sembuf *sops; unsigned nsops;
说明:本系统调用用于执行用户定义的在一组信号量上操作的行为集合.
该组信号量与semid相关.
参数sops为一个用户定义的信号量操作结构数组指针.
参数nsops为该数组的元素个数.
数组的每个元素结构包括如下成员:
sem_num; /* 信号量数 */
sem_op; /* 信号量操作 */
sem_flg; /* 操作标志 */
由本系统调用定义的每个信号量操作是针对由semid和sem_num指
定的信号量的.变量sem_op指定三种信号量操作的一种:
. 若sem_op为一负数并且调用进程具有修改权限,则下列情况之
一将会发生:
* 若semval不小于sem_op的绝对值,则sem_op的绝对值被减去
semval的值.若(semflg&SEM_UNDO)为真则sem_op的绝对值加
上调用进程指定的信号量的semadj值.
* 若semval小于sem_op的绝对值同时(semflg&IPC_NOWAIT)为
真,则本调用立即返回.
* 若semval小于sem_op的绝对值同时(semflg&IPC_NOWAIT)为
假,则本系统调用将增加指定信号量相关的semncnt值(加一),
将调用进程挂起直到下列条件之一被满足:
(1).semval值变成不小于sem_op的绝对值.当这种情况发
生时,指定的信号量相关的semncnt减一,若
(semflg&SEM_UNDO)为真则sem_op的绝对值加上调用
进程指定信号量的semadj值.
(2).调用进程等待的semid已被系统删除.
(3).调用进程捕俘到信号,此时,指定信号量的semncnt值
减一,调用进程执行中断服务程序.
. 若sem_op为一正值,同时调用进程具有修改权限,sem_op的值加
上semval的值,若(semflg&SEM_UNDO)为真,则sem_op减去调用
进程指定信号量的semadj值.
. 若sem_op为0,同时调用进程具有读权限,下列情况之一将会发
生:
* 若semval为0,本系统调用立即返回.
* 若semval不等于0且(semflg&IPC_NOWAIT)为真,本系统调用
立即返回.
* 若semval不等于0且(semflg&IPC_NOWAIT)为假,本系统调用
将把指定信号量的
semzcnt值加一,将调用进程挂起直到下列情况之一发生:
&