进程间IPC通信-stop waiting for thing to happen,go out and make them happen!!!
进程间通信:
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一同使用,表示如果要创建的消息队列已经存在,则返回错误
在以下两种情况下,将创建一个新的消息队列:
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!!!的更多相关文章
- Python 35 进程间的通信(IPC机制)、生产者消费者模型
一:进程间的通信(IPC):先进先出 管道:队列=管道+锁 from multiprocessing import Queue q=Queue(4) q.put(['first',],block=T ...
- Linux进程间的通信
一.管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: A. 管道是半双工的,数据只能向一个方向流动: B. 需要双工通信时,需要建立起两个管道: C. 只能用于父子进程或者兄弟 ...
- 探讨一个新的两个进程间的通信和编程模型 (Windows)
本文探讨一个新的Windows上的两个UI进程间的通信和编程模型. 开门见山,下面是这个通信模型的梗概图: 这个模型的设计目标描述如下: (1)发送数据接口:RpcSend, RpcPost RpcS ...
- python全栈开发day32-进程创建,进程同步,进程间的通信,进程池
一.内容总结 1.进程创建 1) Process:两种创建一个新进程的方法: 1.实例化Process,通过args=(,)元组形式传参,2创建类继承Process,类初始化的时候传参数 2) p.j ...
- [Socket]Socket进程间的通信
转自:http://blog.csdn.net/giantpoplar/article/details/47657303 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket ...
- Python网络编程(进程池、进程间的通信)
线程池的原理: 线程池是预先创建线程的一种技术.线程池在还没有任务到来之前, 创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态, 即均为启动,不消 ...
- Android 使用AIDL实现进程间的通信
在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(android Interface Definition Language)是一种接口定义语言,编译器通 ...
- swoole进程间如何通信
Swoole进程间通信的方式 管道pipe 管道用于进程之间的数据交互,Linux系统本身提供了pipe函数用于创建一个半双工通信管道.半双工的通信方式中数据只能单向流动(一端只读一端只写),只能在具 ...
- 进程间的通信—套接字(socket)
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网 ...
随机推荐
- 一些DevTools的小技巧-让你不止会console.log()
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/beyond-console-log-leve ...
- Powerful Number 筛学习笔记
Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...
- 开源组件编排引擎LiteFlow发布里程碑版本2.5.0
介绍 LiteFlow作为一款轻量级组件编排框架,自开源来,获得了挺多人的关注.社区群也扩展到了接近200人. 早期版本因为疏忽打理,有一些BUG,迭代也不及时.距离上一个稳定版本2.3.3,已经有超 ...
- OO第四单元——基于UML的UML解析器总结&OO课程总结
OO第四单元--基于UML的UML解析器总结&OO课程总结 前言:一学期愉快(痛苦)的OO课程学习结束了,OO几个单元作业都各有特色,实验也各有特色,仔细回味起来,不再是单纯的敲代码(但自己还 ...
- BUAAOO第二单元代码分析
第一次作业 设计思路与感想 第一次作业是要求有捎带的电梯实现, 第一次作业是花费的时间比较长的一次,花费了很多的时间去思考架构的问题.起初是想要搞三个线程的:输入线程,调度器线程和电梯线程,想要搞一个 ...
- Java(56-64)【IDEA】
1.IDEA的使用 集成开发软件 eclipse IDEA 第一步:创建新的项目 第二步:空白的project 第三步:modules->java 写在src中 src->package- ...
- 16. Vue2.4+新增属性$attrs
vm.$attrs简介 首先我们来看下vue官方对vm.$attrs的介绍: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明 ...
- matlab函数句柄
matlab函数句柄 直接调用函数: 被调用函数只能被其M文件同名的主函数或在M文件中的其他函数调用,一个文件只有一个主函数. 间接调用函数: 避免只能使用直接调用函数的情况,个人理解就是为一个函 ...
- Day12_62_线程的生命周期
线程的生命周期 要实现多线程,必须在主线程中创建新的线程对象. 任何线程一般都具有五种状态,即创建,就绪,运行,阻塞,终止(消亡) 新建状态:在程序中创建了一个新的线程对象后,新的线程对象便处于新建状 ...
- src/众测篇:oracle注入过滤-- , + - * /,case when ,select,from,decode等函数如何证明是注入?
(1)nullif: NULLIF:如果exp1和exp2相等则返回空(NULL),否则返回第一个值 真: 假: (2)nvl/nvl2 测试失败无法实现:)记录 (3)如果是oracle报错注入 ...