获得key值,生成一个具有唯一性的ID,即队列的房间密码。在亲缘关系进程通信的时候,可以直接key = IPC_PRIVATE
key_t ftok(const char *pathname, int proj_id)
pathname:程序范围内已经存在的文件名加绝对路径
proj_id:只有8bits有效,若大于255则只有后8bits有效
返回值:成功 = key值,失败 = -1
创建消息队列,若对应key值的IPC对象不存在,则创建,若存在,返回IPC对象的ID。队列的大小限制MSGMNB = 16384 = 2的14次方
int msgget(key_t key, int msgflg)
key:IPC_PRIVATE 或 ftok()得到的值
msgflg:共有9个权限标志,可填 IPC_CREAT | 0666 或 IPC_CREAT | IPC_EXCL | 0666 (判断IPC对象是否存在)
返回值:成功 = 消息队列的ID,失败 = -1
消息结构体,自由创作,但消息类型必须在第一个位置
typedef struct{
long msg_type; //消息类型必须在第一个位置,
char mtxt[1024];
...
}msg_t;
发送消息
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
msqid:消息队列的ID
msgp:要发送的消息的地址
msgsz:消息正文的大小,sizeof(msg_t) - sizeo