- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SystemV消息队列
函数列表
key_t ftok(const char *pathname, int proj_id);
//# include sys/types.h
//# include sys/ipc.h
IPC消息队列有一个key的属性(类型为key_t),一般由此函数产生,产生方法为:根据文件名pathname(必须存在且有权限访问)得到索引节点号,然后将索引节点号和子序列号(proj_id)组成ID标示。
int msgget(key_t key, int msgflg);
#include sys/types.h
#include sys/ipc.h
#include sys/msg.h
此函数有两个作用:创建key属性为key的消息队列和返回key指定消息的msgid,其中msgid是消息队列的标示。
其中msgflg标示符可以指定创建消息队列的访问权限(一般为S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH用户读写,组和其它读);同时可以指定msgget函数执行的操作,在创建消息队列时,msgflg必须有IPC_CREAT。
如果msgflg为0,则只返回消息队列的msgid。
此函数成功时,返回非负消息队列标示;失败时返回-1。
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
#include sys/msg.h
其中msgid是msgget返回的消息队列标识符,msgp是一个结构体指针,msgsz是结构体中具体数据的长度,msgflg可以为0或者IPC_NOWAIT。
当msgflag指定IPC_NOWAIT时,msgsnd函数成为非阻塞,当由于一些限制条件(例如没有存放消息的可用空间时)出现时,该函数立即放回。
发送成功返回0,发送失败返回-1.
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
msgsz是结构体(msgp)中保存数据的最大值,也是函数能够返回的最大数据量。而具体的接收的数据量,由函数返回值确定。msgflag可以为0或者IPC_NOWAIT。msgtyp指定待接收消息的类型。
当msgflag指定为IPC_NOWAIT时,msgrcv函数成为非阻塞,当由于一些限制条件(例如消息队列中没有消息)时,该函数立即返回。
其中type的规则为:
当type=0时,返回消息队列中的第一个消息;
当type0时,返回类型值为type的消息;
当type0时,返回类型值小于或者等于type绝对值的消息中类型值最小的消息。
msgrcv函数成功时返回接收消息的数据量,失败返回-1.
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
消息队列控制函数。Msgid为消息队列标示,cmd为具体的命令(一共有三种),buf用来设置或取得消息队列的msgid_ds结构体。
IPC_RMID:删除msgid指定的消息队列。Buf参数忽略,为0
IPC_SET:设置消息队列msgid_ds结构体的四个成员:msg_perm.uid,msg_perm_gid,msg_perm.mode和msg_qbytes。它们的值来自由buf指向的结构体中的相应成员。
IPC_STAT:给调用者返回消息队列msgid_ds结构体,通过buf返回。
实例解析
create|send|receive|remove
消息队列的创建和删除、消息的发送和接收。采用默认的struct msgbuf作为消息体。
// mymsgcreate.c
#include sys/msg.h
#include fcntl.h // O_CREATE
#include sys/types.h // pid_t
#include sys/stat.h
int main(int argc, char **argv)
{
int c, oflag, mqid;
oflag = S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH | IPC_CREAT;
//设置权限(用户读写,组和其它读)
//指定msgget具体操作(创建消息队列并返回ID)
if((mqid = msgget(ftok(test3, 0), oflag))0)
printf(create error!\n);
//ftok的pathname参数所指向的文件必须存在
printf(mqid===%d\n,mqid);
exit(0);
}
//#gcc myms
您可能关注的文档
最近下载
- 商业地产运营管理规范.doc VIP
- 恒立液压介绍样板.pptx VIP
- P-控制图(计数型)+柏拉图.xls VIP
- 人教版(2024)八年级上册数学《用完全平方公式分解因式》PPT课件.pptx VIP
- 2025重庆国际投资咨询集团有限公司招聘5人备考题库附答案详解.docx VIP
- 2024-2025学年初中音乐八年级下册粤教花城版(2024)教学设计合集.docx
- 百度舆情产品使说明手册.docx VIP
- 2023年新疆交通建设集团有限责任公司校园招聘考试题库及答案解析.docx VIP
- 关于DXF-1.6(Ⅱ)型分段绝缘器的检调方法分解.ppt VIP
- 电力系统稳态分析(第四版)陈珩课后习题答案.docx VIP
原创力文档


文档评论(0)