快速业务通道

Linux进程通信

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-01
的唯一性只在每一类的IPC对象内成立. --标识符, 只在内核中使用, IPC对象在程序中式通过关键字(key)来访问的. --1. 建立IPC的首要问题: 如何构造新的关键字使之不和已有的关键字冲突. key_t mykey; mykey = ftok("/tmp/myapp", ''a''); key_t mykey; mykey = ftok(".", ''a''); 只要我们保证server和client从同一个目录运行,我们就可以保证它们使用上面的代码产生的 关键字是相同的. --2. ipcs命令 ipcs -q 只显示消息队列 ipcs -m 只显示共享内存 ipcs -s 只显示信号量 ipcrm <msg | sem | shm) <IPC_ID> --强制系统删除已存在的IPC对象 --一. ////////////////////******消息队列******//////////////////// . "消息队列" (Message Queue) 3.1 ipc_perm : 保存每个IPC对象权限信息. linux/ipc.h 3.2 msgbuf : 我们可以自己定义传递给队列的消息的数据类型. linux/msg.h 4B 4056B 3.3 msg : 消息队列在系统内核中式以消息链表的形式出现的.完成消息链表每个节点结构定义的msg就够. 3.4 msgqid_ds : 被系统内核用来保存消息队列对象有关数据. linux/msg.h 有关函数 3.a [P95] int msgget(key_t key, int msgflg); --创建新的消息队列或获取已有的消息队列. 3.b 用来向消息队列发送消息的. linux/msg.h int msgsnd(int msqid, struct msgbuf* msgp, int msgsz, int msgflg); // 消息发送函数 int open_queue(key_t keyval) { int qid; if( (qid=msgget(keyval, IPC_CREAT|0660)) == -1){ return -1; } return qid; } int send_message(int qid, struct mymsgbuf *qbuf) { int result, length; //The length is essentially the size of the structure minus sizeof(mytype) length = sizeof(struct mymsgbuf) - sizeof(long); if((result=msgsnd(qid, qbuf, length, 0)) == -1){ return -1; } return result; } int main() { int qid; key_t msgkey; struct mymsgbuf{ long mtype; //Message Type int request; //Work request number double salary; //Employee''s salary }msg; //Generate our IPC key value msgkey = ftok(".", "m");

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号