C语言 进程通讯 信号量集 示例

本文介绍了在C语言中如何利用信号量集进行进程通信。首先,通过ftok()获取key值来创建具有唯一性的标识。接着,详细讲解了创建信号量集的过程,包括设置关键参数如key、nsems和semflg。然后,阐述了初始化信号量集成员的值以及执行PV操作的方法。最后,提供了发送和接收操作的示例代码,帮助读者理解如何在实际应用中使用信号量集进行进程间的同步与协调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获得key值,生成一个具有唯一性的ID,即队列的房间密码。在亲缘关系进程通信的时候,可以直接key = IPC_PRIVATE

key_t ftok(const char *pathname, int proj_id)

pathname:程序范围内已经存在的文件名加绝对路径

proj_id:只有8bits有效,若大于255则只有后8bits有效

返回值:成功 = key值,失败 = -1

创建信号量集

int semget(key_t key, int nsems, int semflg)

key:IPC_PRIVATE 或 ftok()得到的值

nsems:信号量集的成员个数

semflg:共有9个权限标志,可填 IPC_CREAT | 0666  或 IPC_CREAT | IPC_EXCL | 0666 (判断IPC对象是否存在)

返回值:成功 = 信号灯集的ID,失败 = -1

初始化信号量集的成员的值

int semctl(int semid, int semnum, int cmd, ...)

semid:信号灯集的ID

semnum:信号灯集的成员下标

cmd:指令,SETVAL = 设置信号灯的值

                     GETVAL = 获取信号灯的值

                     IPC_RMID = 删除信号灯集

……:联合体 union semun{ };

返回值:返回值:成功 = 0,失败 = -1

PV操作

int semop(int semid, struct sembuf *sops, unsigned nsops)

semid:信号灯集的ID

sops:操作方法结构体首地址,struct sembuf{ }

nsops:要操作的信号量集成员的个数

返回值:成功 = 0,失败 = -1

示例

send

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值