msem_init 子例程
用途
初始化已映射文件或共享内存区域中的信号量。
库
标准 C 库 (libc.a)
语法
#include <sys/mman.h>msemaphore *msem_init ( Sem, InitialValue)
msemaphore *Sem;
int InitialValue; 描述
msem_init 子例程分配一个新的二进制信号量并初始化新信号量的状态。
如果 InitialValue 参数的值为 MSEM_LOCKED,那么将以锁定状态初始化新信号量。 如果 InitialValue 参数的值为 MSEM_解锁,那么将以解锁状态初始化新信号量。
姆塞马普霍尔 结构位于映射文件或共享内存区域中,该区域是通过成功调用 mmap 子例程而创建的,并且具有读写访问权。
无论是在映射文件中还是在匿名共享内存区域中创建信号量,由已映射相同文件或共享区域的进程使用解析为相同文件或区域偏移量开头的 姆塞马普霍尔 结构指针进行的任何引用都将被视为对相同信号量的引用。
将忽略并覆盖存储在 姆塞马普霍尔 结构中的任何先前信号状态。
参数
| 项 | 描述 |
|---|---|
| 塞姆 | 指向用于存储信号的状态的 姆塞马普霍尔 结构。 |
| 原始值 | 确定在分配时是锁定信号量还是解锁信号量。 |
返回值
当成功时, msem_init 子例程返回一个指向已初始化的 姆塞马普霍尔 结构的指针。 否则,它将返回空值,并设置 错误号 全局变量以指示错误。
错误代码
如果 msem_init 子例程不成功,那么 错误号 全局变量将设置为下列其中一个值:
| 项 | 描述 |
|---|---|
| EINVAL | 指示 InitialValue 参数无效。 |
| ENOMEM | 指示未能创建新信号量。 |