2014025629(3)《嵌入式系统程序设计》第七周学习总结

最后一次作业了,也感谢老师让我学到了很多知识。

本周的学习内容:

有名管道和消息队列的传输和接收,并且在课上和课下实验楼中进行了程序的验证和操作。

1.有名管道:

管道应用的一个重大限制是它没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道(named pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。有名管道可以将两个互不相关的进程实现彼此的通信,可以通过路径名来指出,并且在文件系统中是可见的。

2.无名管道:

无名管道只能用于具有亲缘关系的进程之间,这就大大地限制了管道的使用。有名管道的出现突破了这种限制, 它可以使互不相关的两个进程实现彼此通信。FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始处返回数据。filedis[0] 用于读管道,filedis[1] 用于写管道。


3.消息队列:

消息队列的含义:消息队列就是一些消息的列表。用户可以从消息队列中添加消息和读取消息等。具有一定的FIFO的特性,但是可实现消息的随即查询。这些消息存在于内核中,由“队列ID”来标识。消息队列的实现包括创建和打开队列、添加消息、读取消息和控制消息队列这四种操作。其中创建或打开消息队列使用的函数是msgget() 添加消息使用的函数是msgsnd()函数,读取消息使用的函数是msgrcv(),后控制消息队列使用的函数是msgctl()。

4.msgget()函数:

消息队列的键值,多个进程可以通过它访问同一个消息队列,其中有个特殊值 IPC_PRIVATE。它用于创建当前进程的私有消息队列。 key:返回新的或已有队列的ID,IPC_PRIVATE

5.msgrcv()函数:

msqid是消息队列的引用标识符,msgp是接收到的消息将要存放的缓冲区,msgsz是消息的大小,msgtyp是期望接收的消息类型,msgflg是标志。

msgctl()。 msgtyp:0:接收消息队列中第一个消息。大于 0:接收消息队列中第一个类型为 msgtyp 的消息;小于 0:接收消息队列中第一个类型值不小于 msgtyp 绝对值;且类型值又最小的消息。

6.msgsnd()函数:

msgrcv/msgsnd为linux系统中异步或进程间通信的一种机制,这两个函数主要用于操作特定的消息队列。msgrcv()可以从消息队列中读取消息,msgsnd()将一个新的消息写入队列。

这些就是本周学会的知识,感谢老师,我会继续努力的。

 

posted @ 2017-06-10 16:09  王哲学  阅读(117)  评论(0编辑  收藏  举报