binder_open(...)都干了什么? 在回答binder_transaction(...)之前,还有一些基础设施要去探究,比如binder_open(...),binder_mmap(...),这些调用是在打开设备文件/dev/binder之后必须完成的程式化操作,而在它们内部需要做一些数据结构的准备.首先来看binder_open(...) kernel/drivers/staging/android/binder.c:2979 static int binder_open(struc…
从服务端代码出发,TestServer.cpp int main() { sp < ProcessState > proc(ProcessState::self()); sp < IServiceManager > sm = defaultServiceManager(); sm->addService(String16("service.testservice"), new BnTestService()); ProcessState::self()-&…
前文中曾经遇到过Parcel,从命名上知道他负责数据打包.在checkService的请求/响应体系中,Parcel只打包了基本数据类型,如Int32.String16……后面还要用于打包抽象数据类型flat_binder_object,这会稍微复杂一些,因此有必要拿出来单独研究.我们从Parcel::writeInterfaceToken(…)追起,它的层层调用关系如下,这些函数都在frameworks/native/libs/binder/Parcel.cpp文件中,行数和函数名为: wri…
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn…
作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是用来解决Redis的单点容量问题. 如何来解决Redis单点容量问题呢? 如果数据可以拆分,我们可以让不同业务的客户端打到不同的Redis实例中. 如果数据不能拆分,我们有如下方式: 方案2-1 modula方式 可以通过Hash加上取模的方式来定位打到哪个Redis实例中. 这种方式的弊端在于:模…
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+最朴素的阻塞的方式来实现一版客户端和服务端通信的代码,然后再重构成Netty官方推荐的写法. 第一步,引入netty依赖包. <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</a…
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo indigo PCL例子以及xtionpro live pcl --$ roslaunchrobot1_description display.launch model:="`rospack findr…
python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般会看到以下几种格式的文件: msi, egg, whlmsi文件:Windows系统的安装包, 在Windows系统下可以直接双击打开, 并按提示进行安装egg文件:setuptools使用的文件格式, 可以用setuptools进行安装whl文件:wheel本质上是zip文件, 它使用.whl作为…
Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下. 声明数组 var variable_name [SIZE] variable_type 例子: var x [10] int 初始化数组 var x = [5] int {1, 2, 3, 4, 5} var y = [...] int {1, 2, 3, 4, 5} 初始化数组中 {} 中的元…
createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数原型: int createTrackbar(const String& trackbarname, const String& winname, int* value, int count, TrackbarCallback onChange = , ); 第一个参数,const strin…