linux环境创建信号灯失败,Linux环境进程间通信(四):信号灯

本文详细介绍了信号灯的系统调用semop和semctl,包括它们的功能、参数及返回值。semop用于对信号灯进行操作,如获取或修改信号灯状态,而semctl则用于更复杂的控制,如获取或设置信号灯信息。同时,文章提到了信号灯操作的限制,如一次性操作信号灯的数量限制、信号灯的最大值限制等,并指出这些限制在使用semop和semget时应予以关注。
摘要由CSDN通过智能技术生成

眠等待。

调用返回:成功返回0,否则返回-1。

3) int semctl(int semid,int semnum,int cmd,union semun arg)

该系统调用实现对信号灯的各种控制操作,参数semid指定信号灯集,参数cmd指定具体的操作类型;参数semnum指定对哪个信号灯操作,只对几个特殊的cmd操作有意义;arg用于设置或返回信号灯信息。该系统调用详细信息请参见其手册页,这里只给出参数cmd所能指定的操作。

IPC_STAT 获取信号灯信息,信息由arg.buf返回;

IPC_SET 设置信号灯信息,待设置信息保存在arg.buf中(在manpage中给出了可以设置哪些信息);GETALL 返回所有信号灯的值,结果保存在arg.array中,参数sennum被忽略;

GETNCNT 返回等待semnum所代表信号灯的值增加的进程数,相当于目前有多少进程在等待semnum代表的信号灯所代表的共享资源;

GETPID 返回最后一个对semnum所代表信号灯执行semop操作的进程ID;GETVAL 返回semnum所代表信号灯的值;

GETZCNT 返回等待semnum所代表信号灯的值变成0的进程数;

SETALL 通过arg.array更新所有信号灯的值;同时,更新与本信号集相关的semid_ds结构的sem_ctime 成员;

SETVAL 设置semnum所代表信号灯的值为arg.val;

调用返回:调用失败返回-1,成功返回与cmd相关:

3f37af41cee1a1c47df80bf444053283.png

五、信号灯的限制

1、一次系统调用semop可同时操作的信号灯数目SEMOPM,semop中的参数nsops如果超过了这个数目,将返回E2BIG错误。SEMOPM的大小特定与系统,redhat 8.0为32。

2、信号灯的最大数目:SEMVMX,当设置信号灯值超过这个限制时,会返回ERANGE错误。在redhat 8.0中该值为32767。

3、系统范围内信号灯集的最大数目SEMMNI以及系统范围内信号灯的最大数目SEMMNS。超过这两个限制将返回ENOSPC错误。redhat 8.0中该值为32000。

4、每个信号灯集中的最大信号灯数目SEMMSL,redhat 8.0中为250。 SEMOPM以及SEMVMX是使用semop 调用时应该注意的;SEMMNI以及SEMMNS是调用semget时应该注意的。SEMVMX同时也是semctl调用应该注意的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值