进程间通信:消息队列&信号量&共享内存

进程间通信之管道,点击这里:
http://blog.csdn.net/qq_33951180/article/details/68959819

消息队列

  • 消息队列是一种进程间发送二进制数据块的机制,每个数据块都有特定的类型,接受者进程可以有不同的类型值。
  • 使用消息队列,可以避免使用管道时带来的同步与阻塞等问题。但其也有缺点:与管道类似,在每一个数据块上都有一个最大尺寸限制。

现在我们实现一个消息队列,当然,在这之前先介绍几个函数:

  • 创建消息队列
int msgget(key_t key, int msgflg);

返回值:成功返回一个正整数(消息队列的标识符),失败返回-1并设置errno
参数:
key:是一个键值,用来标识一个全局唯一的消息队列。可以认为是一个端口号,也可以由ftok函数产生。
msgflg:
IPC_CREAT:如果IPC不存在,则创建一个IPC资源,否则打开操作;
IPC_EXCL:只有在共享内存不存在的时候,新的共享内存才建立,否则就产生错误。
如果单独使用IPC_CREAT,***get()函数要么返回一个已经存在的共享内存的操作符,要么返回一个新建的共享内存的标识符。
如果将IPC_CREAT和IPC_EXCL一起使用,***get()将返回一个新建的IPC标识符;如果该IPC资源已经存在,或者返回-1。两个一起使用能够保证IPC资源是新建的,而不是打开已有对象。

【关于ftok函数】

key_t ftok(const char *pathname, int proj_id);

该函数把从pathname导出的信息与id的低序8为组合成一个IPC键(把一个已经存在的路径名转换成一个key_t值)。

  • 向消息队列读/写消息
读: ssize_t msgrcv(int msqid, void *msgp, size_t msgsz,
                     long msgtyp, int msgflg);
写: int msgsnd(int msqid, const void *
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值