linux下进程间通信 IPC (InterProcess Communication )一般有5种方式,本文讲述其中的4种。 

管道、消息队列、信号、共享内存

过程基本就是创建、删除、发送、接收、管理。


管道 pipe
     1.创建pipe
        int pipe(int pipefd[2])
        返回值:0 失败 -1
     2.命名管道
       int mkfifo(const char *pathname,mode_t mode);
                              管道文件的路径名  权限
       返回值:0,失败 -1;
   
 
消息队列
  linux
  1.创建消息 int msgget(key_t key,int shmflg)
                        队列标识       队列
          返回值:代码操作的句柄,失败-1

  2.接收消息
          ssize_t msgrcv(int msqid,void *msgp,size_t msgsz,long msgtype,    int msgflg);
                         操作句柄    接收数据   大小        接收的数据类型   标志选项
           返回值:
  3.发送消息
          int msgsnd(int msqid,const void *msgp,size_t msgsz,int msgflg);
  4.消息队列控制
          int msgctl(int msqid,int cmd,struct msqid_ds *buf)

消息队列
    windows MFC
    1.创建 .h
       //{{AFX_MSG()
            afx_msg void MyFun(UNIT,LONG);
      //{{AFX_MSG()
  DECLARE_MESSAGE_MAP()
    2.发送
         LRESULT sendMessage(HWND hwnd,  窗口句柄
                              UINT msg,    其他消息
                              WPARAM wParam,
                              LPARAM lParam,);
    
    3.处理消息  .cpp文件
     BEGIN_MESSAGE_MAP(,)
        ON_MESSAGE(WM_MYWND1,MyFun)
     END_MESSAGE_MAP()
     void MyFun(UNIT uparam,LONG lparam)
                        
信号量  计数器
   1.创建
     int semget(key_t key,int nsems,int semflg);
                 信号集名字   指定一次创建多少个信号量
     返回值:成功 信号集标识码  失败:-1
   2.设置初始值:
     int semctl(int semid,intsemnum, int cmd,…);
                信号集标识码  第几个信号量   具体操作(设单个初值,设多个初值,删信号集)
   3.访问信号量
    int semop(int semid,struct sembuf *sops,unsigned nsops);
               返回值:     结构体

共享内存 (聊天)
         1.创建 int shmget(key_t key,size_t size,int shmflg)key_t key 共享内存字段名称,大小,
              返回:成功,操作句柄
              失败:-1
         2.映射到虚拟地址空间    void shmat(int shmid,const void *shmaddr,int shmflg)
                                         操作句柄        地址            只读
         3.解除映射             int shmdt(const void shmddr) 共享内存地址
            返回:成功0 失败-1
         4.删除                int shmctl(int shmid,int cmd, struct shmid_ds *buf)
                                            句柄    删除         描述
 

 

版权声明:本文为jasmineTang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jasmineTang/p/14369427.html