进程间通信

消息队列
      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所指向的数组的元素个数
    

你可能感兴趣的:(进程间通信)