找回密码
 注册
关于网站域名变更的通知
查看: 234|回复: 1
打印 上一主题 下一主题

什么是Linux消息队列?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-10-9 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、概念
, S  B0 Y. u8 e8 g2 m8 h' O% p& F

' H# V3 o7 @+ Y3 S* F+ r7 I' ~  消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向中按照一定的规则添加新消息;有读权限的进程则可以读走消息。读走就没有了。消息队列是随内核持续的。 只有内核重启或人工删除时,该消息才会被删除。在系统范围内,消息队列与键值唯一对应。
: e; v8 F9 }( N0 Y9 v0 S
) k6 q6 o1 Q+ z! O$ P4 Z) C二、步骤及思路
' T- U( M1 \7 ^# j

2 U7 G2 b! g/ Y6 H  Q& f1、取得键值* a* @. d8 b8 J. }: |

  b8 a* b2 R  Z/ G" T2、打开、创建消息队列
( E5 ]$ E2 K& p1 S/ F- \
7 ~. {8 W! @. r2 q+ X8 {3、发送消息" `$ v9 D2 ~3 }% i9 k) z/ R3 u
) o* s- ^8 f+ ^" J0 M- }: i$ W
4、接收消息
' c/ y, v3 R% n+ Q- O/ U1 k8 C( d" P
9 u9 K, g, C& }0 p下面具体看看:
! I8 R0 V( ]. D, W* u; z2 E% z( z/ M! k, x+ m
1、取得键值
2 T- K% d5 `& f* u9 r8 M. d# C; H2 }1 o# w' s) ^
      key_t ftok(char *pathname, char proj)3 y5 g  ?( k9 z7 X
/ }1 a3 M0 }: i# c5 k# M
" Z8 g) I# a0 o% P- L9 i

" ^( K# L8 |* R' _3 `7 ^   头文件为<sys/ipc.h>。返回文件名对应的键值,失败返回 -1。proj是项目名,随便写,不为0就行。
% o" C9 H0 D  ?
  L; H, W8 O8 Q/ i* S# P   fname就是你指定的文件名(已经存在的文件名)。需要有-t 的权限,或用root权限执行,通常设为/tmp或设为" . "。这里我感觉不用这个函数也行,因为key值可以自己指定,例如: #define KEY_MSG 0x101
, P& Q- z8 N7 ?1 M7 @/ n, a3 X  ?# B3 Q1 ^# A# Y5 l2 H& ~' h+ s' P; d
2、打开、创建消息队列$ R/ }, b4 q! G8 j" P9 ~

4 |+ v; i$ C. I0 s& y7 J& P  e     int msgget(key_t key, int msgflg)
, Z! \, R8 R3 h$ p9 C
, \4 V! E' \- b4 ^
2 T' W: l4 e5 k+ a4 }4 E% ]* d  头文件为<sys/msg.h>。key由ftok获得。
/ `; g  `! }1 ?- p3 P1 I& @8 T& m
2 z8 r6 t7 t9 |3 ]$ B3 ~* A5 v" y, l  msgflg有:
4 c/ W) k* Y1 o# A4 x* F; Z( l2 D5 m4 t8 ]1 U
IPC_CREAT 创建新的消息队列,应配有文件权限0666。
# S+ L# S. y7 l, S  ~" u1 F3 K1 U9 e) @
IPC_EXCL  与IPC_CREAT一同使用,表示如果要创建的消息队列已经存在,则返回错误。6 w, V+ O$ p+ h2 W; a7 \  k% ~
/ P) k6 d( v. B
IPC_NOWAIT 读写消息不阻塞。
0 }6 x( e  n$ l1 K3 q
2 W5 @% w* e, k8 y- q: S6 ~5 m* c5 Q
  当没有与key相对应的消息队列并且msgflg中包含了IPC_CREAT标志 或 key的参数为IPC_PRIVATE 时,创建一个新的消息队列。, [. H: u# i% v8 D( T6 X  u+ @$ y
2 h$ C; {" r* Z+ S
3、发送消息) @, N4 X0 i& d
游客,如果您要查看本帖隐藏内容请回复

* f6 \3 x9 Z2 Y$ a  d6 q: k* G. K+ p8 q; A, s- o  X1 b
8 g+ V  H& u/ \& L

' H1 X% R( U# |. f6 A3 z9 L

该用户从未签到

2#
发表于 2019-10-9 18:46 | 只看该作者
看看什么是Linux消息队列。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-24 08:38 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表