2014025635《嵌入式系统程序设计》第七周学习总结

 

1.有名管道

 

有名管道可以将两个互不相关的进程实现彼此的通信,

 

可以通过路径名来指出,并且在文件系统中是可见的。

 

读进程

 

1.若管道是阻塞打开,且FIFO内无数据,则读进程一直堵塞下去,直到有数据写入。
2.不是阻塞打开,不管有没有数据,会立即执行。

 

写进程

 

阻塞打开,跟读进程一样,直到有东西写入

 

 

如何使用函数调用消息队列呢?

 

msgget函数
msgget()函数原型为:
int msgget ( key_t key, int msgflg )
key是消息队列对象的关键字(key),函数将它与已有的消息队列对象的关键字进行比较来判断消息队列对象是否已经创建
msgflg是权限标志位。

 

msgsnd函数
msgsnd()函数原型为:
int msgsnd(int msqid, const void msgp, size_t msgsz, int msgflg)
msqid:消息队列的队列 ID
msgp:指向消息结构的指针。
msgsz:消息正文的字节数(不包括消息类型指针变量)
msgflg:若为IPC_NOWAIT 若消息无法立即发送(比如:当前消息队列已满),函数会立即返回。若为0: msgsnd 调阻塞直到发送成功为止。

 

msgrcv函数
msgrcv()函数原型为:
int msgrcv(int msgid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
msqid:消息队列的队列 ID
msgp:消息缓冲区, 同于 msgsnd()函数的 msgp
msgsz:消息正文的字节数(不包括消息类型指针变量)
msgtyp:0:接收消息队列中第一个消息;大于 0:接收消息队列中第一个类型为 msgtyp 的消息;小于 0:接收消息队列中第一个类型值不小于 msgtyp 绝对值
且类型值又最小的消息
msgflg:MSG_NOERROR:若返回的消息比 msgsz 字节多,则消息就会截短到 msgsz 字节,且不通知消息发送进程;IPC_NOWAIT 若在消息队列中并没有相应类型的消息可以接收,则函数立即返回;0: msgsnd()调用阻塞直到接收一条相应类型的消息为止。

 

posted on 2017-06-13 16:00  刘沐枫  阅读(111)  评论(0编辑  收藏  举报