注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
防病毒必务宝典—计算机病毒专杀
高手支招 巧妙利用系统进程手工杀
清除不明进程msser 珊瑚QQ病毒防
巧妙利用系统进程拒绝病毒侵袭
杀毒全接触:关于mcafee的进程了
ORACLE实例的进程结构和内存结构
存储过程编写经验和优化措施
Windows 2000 常用系统进程列表
Windows 2000进程细述
详细分析进程 手工搞定可疑病毒
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> C >> 文章正文
多进程编程
作者:佚名  来源:不详  点击:  更新:2006-12-19
简介:
;         * 队列中的消息的类型是有效的.
                 * 消息队列标志被系统删除.系统调用返回-1.
                 * 调用进程接收到一个未被忽略的中断信号,调用进程继续
                   执行或被终止.
             调用成功后,对应指定的消息队列的相关结构做如下动作:
             . 消息数(msg_qnum)减1.
             . 消息队列最近接收进程号(msg_lrpid)改为调用进程号.
             . 消息队列接收时间(msg_rtime)改为当前系统时间.
             以上信息可用命令ipcs -a看到.
        返回值:调用成功则返回值等于接收到实际消息正文的字节数.
             不成功则返回-1.
    15.msgctl()
        功能:消息控制操作
        语法:#include 
             #include 
             #include 
             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 
             #include 
             #include 
             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_WAIT 0      /*等待方式在include文件中未定义*/
             int rmsqid;             /*读消息队列标识符*/
             int wmsqid;             /*写消息队列标识符*/
             struct msgbuf {
                 long mtype;
                 char mtext[200];
             } buf;
             /*若读消息队列已存在就取得标识符,否则则创建并取得标识符*/
             if ((rmsqid=msgget(RKEY,MSGFLG|IPC_CREAT))<0) {
                 printf("get read message queue failed\n");
                 exit(1);
             }
             /*若写消息队列已存在则失败,若不存在则创建并取得标识符*/
             if ((wmsqid=msgget(WKEY,
                  MSGFLG|IPC_CREAT|IPC_TRUNC))<0) {
                 printf("get write message queue failed\n");
                 exit(2);
             }
             /*接收所有类型的消息*/
             if (msgrcv(rmsqid,&buf,sizeof(struct msgbuf)-sizeof(long),
                  0L,IPC_WAIT)>0)
                 printf("get %ld type message from queue

上一页  [1] [2] [3] [4] [5] [6] 






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务