进程间通信之管道,点击这里:
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 *