消息队列通信:
IPC对象:内存文件
消息队列查看:ipcs
消息队列删除:
ipcrm -M/-Q/-S key---删除消息队列、内存共享、信号灯
ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID
流程:创建消息队列->发送消息->接受消息
消息队列的创建:
ftok
key_t ftok(const char *pathname,int proj_id)
功能:根据pathname(目录路径)、proj_id(8位非零值)生成一个key值
返回值:成功返回key值
消息队列的创建:
msgget
          int msgget(key_t key, int msgflg);
           功能:
             根据key值对象的IPC对象创建一个消息队列
           参数:
             key:IPC对象名字 
             msgflg:IPC_CREAT    对象不存在就创建
                    IPC_EXCL     对象存在报错
                    IPC_CREAT | 0664 
           返回值:
             成功返回消息队列ID
             失败返回-1 
  
消息的发送:
msgsnd
          int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
           功能:
             向消息队列中发送消息
           参数:
             msqid:消息队列的ID号
             msgp:发送消息空间的首地址
                 struct msgbuf {
                     long mtype;       //可以理解为名字,可任意写
                     char mtext[1];    /* m储存的消息 */
                 };
             msgz:发送消息内容的大小(不包含发送消息类型)
             msgflg:属性,默认为0
           返回值:
             成功返回0 
             失败返回-1 
  
消息的接收:
msgrcv
ssize_t msgrcv(int msqid, void *msgp,size_t msgsz,long msgtyp,int msgflg );
功能:获取以msqid为id的类型为msgflg的消息。
     参数:
             msqid:消息队列的ID号 
             msgp:存放接收到消息空间的首地址
             msgsz:最多接收消息的空间的大小
             msgtyp:想要接收消息的类型
             msgflg:属性,默认为0 
           返回值:
             成功返回实际接收的字节数
             失败返回-1 
控制消息队列:
                msgctl 
           int msgctl(int msqid, int cmd, struct msqid_ds *buf);
           功能:
             向消息队列发送一条cmd命令
           参数:
             msqid:消息队列的ID号
             cmd:IPC_RMID    删除消息队列 
             buf:默认传NULL
           返回值:
             成功返回0 
             失败返回-1 
共享内存:
共享内存:
     进程间通信最高效的形式
    1.操作方式:
         创建共享内存 -> 映射到共享内存中 -> 共享内存操作 -> 解除映射 -> 删除共享内存 
    2.函数接口:
         1.ftok :与消息队列相似
         
         2.shmget 
           int shmget(key_t key, size_t size, int shmflg);
           功能:
             创建一个共享内存
           参数:
             key:IPC对象名称
             size:共享内存的大小
             shmflg:
                 IPC_CREAT 
                 IPC_EXCL 
           返回值:  
             成功返回共享内存ID
             失败返回-1 
         
         3.shmat
           void *shmat(int shmid, const void *shmaddr, int shmflg);
           功能:
             将一个地址映射到共享内存中
           参数:
             shmid:共享内存ID号
             shmaddr:NULL     让系统选择一个合适的地址映射
                     不为NULL shmflg 设定为SHM_RND 选择离给定地址最近的能够映射的地址进行映射
                              否则传递地址为4k的整数倍
           返回值:
             成功返回映射到共享内存空间中的地址
             失败返回NULL
        4.shmdt 
           int shmdt(const void *shmaddr);
           功能:
             解除映射 
           参数:
             shmaddr:映射的地址
           返回值:
             成功返回0 
             失败返回-1 
        5.shmctl
           int shmctl(int shmid, int cmd, struct shmid_ds *buf);
           功能:
             向共享内存发送命令
           参数:
             shmid:共享内存ID号
             cmd:IPC_RMID    删除共享内存
             buf:NULL 
           返回值:
             成功返回0 
             失败返回-1