C语言 进程通讯 消息队列 示例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值