获得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 <