Linux进程通信
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-01
//Open/create the queue if( (qid=open_queue(msgkey)) == -1){ perror("open_queue"); exit(1); } //Load up the message with arbitrary test data msg.mtype = 1; //>1 msg.request = 1; //data element #1 msg.salary = 1000.0; //data element #2 //Bombs awary! if( (send_message(qid, &msg)) == -1){ perror("send_message"); exit(1); } return 0; } 3.c 和msgsnd()函数对应, msgrcv()函数用来从消息队列中取出消息. linux/msg.h int msgrcv(int msqid, struct msgbuf* msgp, int msgsz, long mtype, int msgflg); int read_message(int qid, long type, struct mymsgbuf* qbuf) { int result, lenght; length = sizeof(struct mymsgbuf) - sizeof(long); if((result=msgrcv(qid, qbuf, length, type, 0)) == -1){ return -1; } return result; } //利用上面提到的msgrcv()对消息长度的处理, 我们可以使用下面的方法来检查队列内是否存在符合条件的消息: int peek_message(int qid, long type) { int result, length; //将msgp和msgsz分别设为NULL和零, 然后检查函数的返回值,如果是E2BIG则说明存在符合指定类型的消息. if((result=msgrcv(qid, NULL, 0, type, IPC_NOWAIT))==-1){ if(ermo == E2BIG) return TRUE; } return FALSE; } 3.d 控制消息队列的行为 linux/msg.h int msgctl(int msgqid, int cmd, struct msqid_ds *buf); ////////////////////////////////////////////////////////////////// /*******************消息队列实例--msgtool(一个交互式的消息队列使用工具)[P100]*******************/ 1. 背景: 直到目前, 我们所接触的有关消息队列的实例只有几个简单的封装函数. 虽然它们也很有用, 但是还不够深入. 因此,我们下面将提供一个将消息队列应用于实际的例子--命令行程序msgtool.使用它我们可以在命令行上提供 消息队列的功能. --提供的这个版本只接收数组类型的数据, 接收其他类型数据的功能请读者自行完成. 4. ////////////////////******信号量******//////////////////// 信号量, 简单说就是用来控制多个进程对共享资源使用的计数器.经常被用作一种锁定保护机制, 当某个进程在对资源 进行操作时防止其他进程对该资源的额访问. Syste |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Linux进程通信的所有评论