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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Linux进程通信的所有评论