进程间通信:

   System V IPC对象:      

         ipcs -q:查看消息队列   ipcs -m:查看共享内存  ipcs -s:查看信号灯集

         ipcrm -q:删除消息队列   ipcrm -m:删除共享内存  ipcrm -s:删除信号灯集

         **:每一个IPC对象都有一个ID,可根据key值得到ID;

         key_t ftok(const char *pathname, int proj_id);    // pathname:你指定的文件名(该文件必须是存在而且可以访问的)  proj_id:是子序号,虽然为int,但是只有8个bit被使用(0-255)。   

   1.消息队列:

      特点: 

        1)任意进程间通信

        2)以整个数据发送,保证数据完整性

        3)可以通过类型发送和接收,考虑消息的优先级和多个进程间通信比较简单

      步骤

        1)创建消息队列  int msgget(key_t key, int msgflg); //key:key值   

                                 // msgflag: IPC_CREAT |0666:创建新的消息队列。 IPC_EXCL:与IPC_CREAT一同使用,表示如果要创建的消息队列已经存在,则返回错误

                 在以下两种情况下,将创建一个新的消息队列:               

                               1、如果键的值是IPC_PRIVATE。

                            2、或者键的值不是IPC_PRIVATE,并且键所对应的消息队列不存在,同时标志中指定IPC_CREAT        

        2)发送      int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

                       msqid:msqid表示发送消息的消息队列id
                                         msgp:msgq结构体指针,表示发送消息的存储空间的起始地址
                                                struct msgbuf {
                                                          long mtype;       /* message type, must be > 0 */
                                                          char mtext[1];    /* message data,消息的存储空间,用户需要根据消息的字节数来自定义大小,需要小于等于MSGMNB */
                                                      };
                                        msgsz: msgsz表示的消息内容数组空间的大小;
                                       msgflg:msgflg表示消息发送的方式:
                                                0:表示阻塞方式发送,只有当消息发送完成才会返回; IPC_NOWAIT:非阻塞方式发送,不管消息是否发送完成,都会立即返回;  
             

        3)接收      ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);

                        msqid:msqid表示接收消息的消息队列id
                                        msgp:msgq结构体指针,表示接收消息的存储空间的起始地址;
                                        msgsz:msgsz表示的消息内容数组空间的大小;
                                       msgtyp:msgtyp接收消息的类型:
                                                msgtyp = 0, 接收消息对列中的第一条消息;
                                                msgtyp > 0, 接收消息队列中类型为msgtyp的第一条消息;
                                                msgtyp < 0, 接收消息队列中类型<=|msgtyp|中类型最小的第一条消息;
                                        msgflg:msgflg表示消息发送的方式:
                                              0:表示阻塞方式接收,只有当消息接收完成才会返回;
                                              IPC_NOWAIT:非阻塞方式接收,不管消息是否接收完成,都会立即返回;

        4)删除消息队列  int msgctl(int msqid, int cmd, struct msqid_ds *buf);

                       msqid:消息队列id

                       cmd:控制操作  
                                IPC_STAT:把msqid_ds结构中的数据设置为消息队列的当前关联值
                                IPC_SET:在进程有足够权限的前提下,把消息队列的当前关联值设置为msqid ds数据结构中给出的值
                                   IPC_ RMID:删除消息队列

                       buf:设置数据结构值     

      

进程间IPC通信-stop waiting for thing to happen,go out and make them happen!!!的更多相关文章

  1. Python 35 进程间的通信(IPC机制)、生产者消费者模型

    一:进程间的通信(IPC):先进先出  管道:队列=管道+锁 from multiprocessing import Queue q=Queue(4) q.put(['first',],block=T ...

  2. Linux进程间的通信

    一.管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: A. 管道是半双工的,数据只能向一个方向流动: B. 需要双工通信时,需要建立起两个管道: C. 只能用于父子进程或者兄弟 ...

  3. 探讨一个新的两个进程间的通信和编程模型 (Windows)

    本文探讨一个新的Windows上的两个UI进程间的通信和编程模型. 开门见山,下面是这个通信模型的梗概图: 这个模型的设计目标描述如下: (1)发送数据接口:RpcSend, RpcPost RpcS ...

  4. python全栈开发day32-进程创建,进程同步,进程间的通信,进程池

    一.内容总结 1.进程创建 1) Process:两种创建一个新进程的方法: 1.实例化Process,通过args=(,)元组形式传参,2创建类继承Process,类初始化的时候传参数 2) p.j ...

  5. [Socket]Socket进程间的通信

    转自:http://blog.csdn.net/giantpoplar/article/details/47657303 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket ...

  6. Python网络编程(进程池、进程间的通信)

    线程池的原理:        线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,        创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,        即均为启动,不消 ...

  7. Android 使用AIDL实现进程间的通信

    在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(android Interface Definition Language)是一种接口定义语言,编译器通 ...

  8. swoole进程间如何通信

    Swoole进程间通信的方式 管道pipe 管道用于进程之间的数据交互,Linux系统本身提供了pipe函数用于创建一个半双工通信管道.半双工的通信方式中数据只能单向流动(一端只读一端只写),只能在具 ...

  9. 进程间的通信—套接字(socket)

      前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网 ...

随机推荐

  1. E. 【例题5】生日相同

    解析 字符串操作,本题解采取了多关键词排序 Code #include <bits/stdc++.h> using namespace std; int f, n; struct node ...

  2. [2020年10月28日普级组]1405.小B浇花

    区 间 和 的 和 区间和的和 区间和的和 题目解析 就直接模拟,从最低的花的高度向最高的花的高度枚举,如果当循环变量的值到达了顶峰,但还有花的数量大于2的,就把循环上线加一(所以数组要开大些) Co ...

  3. PBFT共识算法详解

    PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错) 一.概述 拜占庭将军问题最早是由 Leslie Lamport 在 1982 年发表的论文<T ...

  4. 201871030140-朱婷婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验三 结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握GitHub协作开发程序的操作方法. 这个 ...

  5. Linux就该这么学:重定向,管道符,通配符,转义符,环境变量

    第三章:重定向,管道符,环境变量 3.1 输入输出重定向 定义:输入重定向是指将文件导入命令中,输出重定向是指将原本显示到屏幕的信息输出问文件.相较于输入重定向,输出重定向使用的更多,下面重点介绍输出 ...

  6. 基于sinc的音频重采样(二):实现

    上篇(基于sinc的音频重采样(一):原理)讲了基于sinc方法的重采样原理,并给出了数学表达式,如下:                  (1) 本文讲如何基于这个数学表达式来做软件实现.软件实现的 ...

  7. Spring Authorization Server 全新授权服务器整合使用

    前言 Spring Authorization Server 是 Spring 团队最新开发适配 OAuth 协议的授权服务器项目,旨在替代原有的 Spring Security OAuth 经过半年 ...

  8. Semaphore自白:限流器用我就对了!

    大家好,我是 Semaphore,我的中文名字叫"信号量",我来自 JUC(java.util.concurrent)家族. 我们家族有很多优秀的成员,比如:CountDownLa ...

  9. shell脚本 3 流程控制

    shell流程控制 流程控制是改变程序运行顺序的指令.linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介 ...

  10. 7. Centos7 yum 出现could not retrieve mirrorlist 最终解决方案

    Step 1: sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 Step 2:  将ONBOOT改为yes,wq!保存退出 Step 3:重启ne ...