进程间通信

让人想犯罪 __ 提交于 2019-11-29 12:20:45
消息队列
      key_t ftok(char* pathname,char proj)    //获得键值
    返回文件名对应的键值。
    pathname:文件名、路径
    proj:项目名,不为0即可

      int msgget(key_t key,int msgflg)    //获取消息队列描述字
    key:键值,通过ftok获得
    msgflg:标志位    IPC_CREAT,IPC_EXCL,IPC_NOWAIT    例如 IPC_CREAT|0666;
    返回与键值对应的消息队列描述字
    
      int msgsnd(int msgid,struct msgbuf* msgp, int msgsz ,int msgflg) 
            //向消息队列中发送一条消息
    msqid    已打开的消息队列id
    msgp    存放消息的结构
        struct msgbuf
        {
            long mtype;        //消息类型,可以为int
            char mtext[1];    /消息数据的首地址,不一定是mtext[1]    ,
         }
    msgsz    消息数据长度
    msgflg    IPC_NOWAIT,当消息队列不够空间放要发送的消息时,指明msgsnd是否等待。
     消息收发的类型要一样
      int msgrcv(int msqid,struct msgbuf*msgp,int msgsz,long msgtyp,int msgflg)
        //从msqid代表的消息队列中读取一个msgtyp类型的消息,并把消息存储在msgp
        //指向的msgbuf结构中。 成功读取一条消息后,队列中的这条消息将被删除。

    
信号量
      int semget(key_t key,int nsems, int semflg)
    key    键值,由ftok获得
    nsem    指定打开或新创建的信号灯集中将包含信号灯的数目
    semflg    标识,同消息队列一样

      int semop(int semid, struct sembuf*sops, unsigned nsops)
        struct sembuf{
            unsigned short sem_num;    //要操作的信号量在信号量集里的编号
                            //第一个编号为0
            short sem_op;    //1为释放
            short sem_flg;    //IPC_NOWAIT,操作不满足时,不阻塞,返回并设定错误信息
                        //IPC_UNDO    程序结束时,释放信号量,避免程序在异常情况下结束时
                        //未将锁定的资源解锁,造成资源永远锁定。
        }
        sops    是一个操作数组,表明要进行什么操作
        nsops    sops所指向的数组的元素个数
    

转载于:https://my.oschina.net/u/860952/blog/549217

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!