03-创建或打开一个信号量集
47.2 创建或打开一个信号量集
semget()系统调用创建一个新信号量集或获取一个既有集合的标识符。
key参数是使用45.2节中描述的其中一种方法生成的键(通常使用值IPC_PRIVATE或由ftok()返回的键)。
如果使用semget()创建一个新信号量集,那么nsems会指定集合中信号量的数量,并且其值必须大于0。如果使用semget()来获取一个既有集的标识符,那么nsems必须要小于或等于集合的大小(否则会发生EINVAL错误)。无法修改一个既有集中的信号量数量。
semflg参数是一个位掩码,它指定了施加于新信号量集之上的权限或需检查的一个既有集合的权限。指定权限的方式与为文件指定权限的方式是一样的(表15-4)。此外,在semflg中可以通过对下列标记中的零个或多个取OR来控制semget()的操作。
IPC_CREAT
如果不存在与指定的key相关联的信号量集,那么就创建一个新集合。
IPC_EXCL
如果同时指定了IPC_CREAT并且与指定的key关联的信号量集已经存在,那么返回EEXIST错误。
45.1节对这些标记进行了更加深入的介绍。
semget()在成功时会返回新信号量集或既有信号量集的标识符。后续引用单个信号量的系统调用必须要同时指定信号量集标识符和信号量在集合中的序号。一个集合中的信号量从0开始计数。