Linux两个进程互相发送消息,Linux进程间通信(消息队列,信号量,共享内存)...

写在前面

不得不说,Deadline果真是第一生产力。不过做出来的东西真的是不堪入目,于是又花了一早上重写代码。

实验内容

进程通信的邮箱方式由操作系统提供形如 send()和 receive()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。

背景知识

消息队列

什么是消息队列

消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。

Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。

Linux中如何使用消息队列

Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与其他两个System V PIC机制,即信号量和共享内存相似。

msgget()函数

该函数用来创建和访问一个消息队列。它的原型为:

int msgget(key_t key, int msgflg);

它返回一个以key命名的消息队列的标识符(非零整数),失败时返回-1.

msgsnd()函数

你可能感兴趣的:(Linux两个进程互相发送消息)