使用SYSTEM V队列,有关消息资源释放的问题

leo老家伙 2007-08-01 09:55:16
使用SYSTEM V消息队列中,为避免资源释放,是否每个消息的构造需要全局的吗?资源是否会自动释放?

例如 :
V_SendMsg()
{
MSG_T stSndMsg; /* 需要准备发送的消息 */
初始化stSndMsg;
发送stSndMsg;
msgsnd(...stSndMsg....);

}

V_RcvMsg()
{
MSG_T *pstRcvMsg; /* 准备要接收消息的指针 */
msgrcv(...pstRcvMsg.....);

}

问题:

V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?

V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
...全文
211 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2007-08-21
  • 打赏
  • 举报
回复
我这里释放的主要意思是 :“发送到队列中的那份拷贝内存,是否会由队列自己释放?”
====
是的,队列中的拷贝,msgrcv之后,就从队列中删除了。
dai_weitao 2007-08-21
  • 打赏
  • 举报
回复
队列中资源的由系统处理, 队列外的动态资源你自己处理.
leo老家伙 2007-08-10
  • 打赏
  • 举报
回复
谢谢mymtom(mymtom) ,现在用的也是指针代替的,不过还是有点问题不明白。

我这里释放的主要意思是 :“发送到队列中的那份拷贝内存,是否会由队列自己释放?”
mymtom 2007-08-01
  • 打赏
  • 举报
回复
V_SendMsg()将消息发送到队列中,是否将要发送的消息的一份拷贝发送至队列中呢?还是就将那一段内存直接发送至队列中?
===
拷贝

V_RcvMsg()接收消息后,是否会自动释放资源?还是由我们自己主动释放呢?
===
自己申请的内存当然要自己释放,如果消息长度不是太大,建议用结构代替指针
V_RcvMsg()
{
MSG_T stRcvMsg; /* 准备要接收消息的结构 */
msgrcv(...stRcvMsg.....);

}
这样可以减少指针出错的概率。
当然,如果消息还需要尽一步的处理,指针是较好的选择,但是要坚持谁申请,谁释放的原则。

23,223

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧