| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vc >> 平台系统 >> 文章正文
多进程编程的相关知识总结(二)        【字体:
多进程编程的相关知识总结(二)
作者:-    文章来源:-    点击数:    更新时间:2006-4-20

14.msgrcv()
        功能:从消息队列中取得指定类型的消息.
        语法:#include <sys/types.h>
             #include <sys/ipc.h>
             #include <sys/msg.h>
             int msgrcv(msqid,msgp,msgsz,msgtyp,msgflg)
             int msqid;
             void *msgp;
             int msgsz;
             long msgtyp;
             int msgflg;
        说明:本系统调用从由msqid指定的消息队列中读取一个由msgtyp指定
             类型的消息到由msgp指向的缓冲区中,同样的,该缓冲区的结构如

             前所述,包括消息类型和消息正文.msgsz为可接收的消息正文的
             字节数.若接收到的消息正文的长度大于msgsz,则会被截短到
             msgsz字节为止(当消息标志msgflg&MSG_NOERROR为真时),截掉的

             部份将被丢失,而且不通知消息发送进程.
             msgtyp指定消息类型:
             . 为0则接收消息队列中第一个消息.
             . 大于0则接收消息队列中第一个类型为msgtyp的消息.
             . 小于0则接收消息队列中第一个类型值不小于msgtyp绝对值且
               类型值又最小的消息.
             msgflg指定操作行为:
             . 若(msgflg&IPC_NOWA99v)是真的,调用进程会立即返回,若没有
               接收到消息则返回值为-1,errno设置为ENOMSG.
             . 若(msgflg&IPC_NOWA99v)不是真的,则调用进程会被挂起直到下

               面情况之一发生:
                 * 队列中的消息的类型是有效的.
                 * 消息队列标志被系统删除.系统调用返回-1.
                 * 调用进程接收到一个未被忽略的中断信号,调用进程继续
                   执行或被终止.
             调用成功后,对应指定的消息队列的相关结构做如下动作:
             . 消息数(msg_qnum)减1.
             . 消息队列最近接收进程号(msg_lrpid)改为调用进程号.
             . 消息队列接收时间(msg_rtime)改为当前系统时间.
             以上信息可用命令ipcs -a看到.
        返回值:调用成功则返回值等于接收到实际消息正文的字节数.
             不成功则返回-1.
    15.msgctl()
        功能:消息控制操作
        语法:#include <sys/types.h>
             #include <sys/ipc.h>
             #include <sys/msg.h>
             int msgctl(msqid,cmd,buf)
             int msqid,cmd;
             struct msqid_ds *buf;
        说明:本系统调用提供一系列消息控制操作,操作动作由cmd定义,以下
             cmd定义值表明了各操作动作的定义.
             . IPC_STAT:将msqid相关的数据结构中各个元素的当前值放入由

                 buf指向的结构中.
             . IPC_SET:将msqid相关的数据结构中的下列元素设置为由buf指

                 向的结构中的对应值.
                 msg_perm.uid
                 msg_perm.gid
                 msg_perm.mode
                 msg_qbytes
                 本命令只能由有效UID等于msg_perm.cuid或msg_perm.uid的

                 进程或有效UID有合适权限的进程操作.只有具有合适权限的

                 用户才能增加msg_qbytes的值.
             . IPC_RMID:删除由msqid指示的消息队列.将它从系统中删除并
                 破坏相关的数据结构.
                 本命令只能由有效UID等于msg_perm.cuid或msg_perm.uid的

                 进程或有效UID有合适权限的进程操作.
        返回值:调用成功则返回值为0,否则为-1.
    16.msgget()
        功能:取得一个消息队列.
        语法:#include <sys/types.h>
             #include <sys/ipc.h>
             #include <sys/msg.h>
             int msgget(key,msgflg)
             key_t key;
             int msgflg;
        说明:本系统调用返回与参数key相关的消息队列的标识符.
             若以下事实成立,则与消息队列相关的标识符和数据结构将被创
             建出来:
             . 若参数key等于IPC_PRIVATE.
             . 若参数key没有一个已存在的消息队列标识符与之相关,同时值

               (msgflg&IPC_CREAT)为真.
             创建消息队列时,与新的消息队列标识符相关的数据结构将被初
             始化为如下:
             . msg_perm.cuid和msg_perm.uid设置为调用进程的有效UID.
             . msg_perm.cgid和msg_perm.gid设置为调用进程的有效GID.
             . msg_perm.mode访问权限比特位设置为msgflg访问权限比特位.

             . msg_qnum,msg_lspid,msg_lrpid,msg_stime,msg_rtime设置为0
.
             . msg_ctime设置为当前系统时间.
             . msg_qbytes设置为系统允许的最大值.
        返回值:调用成功则返回一非0值,称为消息队列标识符;否则返回值为-1
.
        例子:本例将包括上述所有消息队列操作的系统调用:
             #define RKEY 0x9001L    /*读消息队列的KEY值*/
             #define WKEY 0x9002L    /*写消息队列的KEY值*/
             #define MSGFLG 0666     /*消息队列访问权限*/
             #define IPC_WA99v 0      /*等待方式在include文件中未定义

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 利用底层键盘钩子屏蔽任意按…

  • 深入剖析MFC中Windows消息处…

  • VC++中进程与多进程管理的方…

  • Window 消息大全使用详解

  • 关于键盘输入

  • Windows多线程多任务设计初步

  • VC++实现Win2000下直接读写磁…

  • 多进程编程的相关知识总结(…

  • 图形显示CPU内存利用率

  • Win32环境下dll编程原理

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |