函数: key_t ftok(const char *filename, int proj_id); 通过文件名和项目号获得System V IPC键值(用于创建消息队列、共享内存所用) proj_id:项目号,不为0即可 返回:成功则返回键值,失败则返回-1
函数: int semget(key_t key, int nsems, int msgflg); key:键值,当为IPC_PRIVATE时新建。 nsems:信号个数。 msgflg:标志。 IPC_CREAT:不存在则新建,否则打开; IPC_EXCL:与IPC_CREAT一同使用时,只有在不存在时才创建,否则出错。 返回:成功则返回IPC标识符,出错返回-1
函数: int semop(int semid, struct sembuf *sops, unsigned nsops); semid:通过semget获取 sops:指向待操作的信号灯结构体,原型如下: struct sembuf{ unsigned short sem_num; //信号灯编号,从0开始 short sem_op; //为正数代表释放信号;为负代表获取信号 Short sem_flg; //操作的标识;IPC_NOWAIT:不阻塞;IPC_UNDO:程序结束时释放信号量 } nsops:要操作的信号量数 返回:成功则返回共享内存起始地址,失败返回-1
函数: void semctl(int semid, int semnum, int cmd, union semun arg); semid:通过semget获取 semnum:操作的信号灯编号 cmd:控制命令,如下: GETPID:获取sempid GETVAL:获取semval SETVAL:设置semval IPC_RMID:删除信号灯 arg:各个量使用与cmd设置有关 返回:成功返回与cmd相关的正数,错误返回-1