当前位置: 首页 > news >正文

网站做弹窗百度问一问

网站做弹窗,百度问一问,b站到底是哪个网站,建筑模板生产设备文章目录 Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用()1.概念2.流程3.bctest.c3.1 注册服务,打开binder驱动3.2 获取服务 4.binder_call Android跨进程通信,IPC&#xf…

文章目录

  • Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用()
    • 1.概念
    • 2.流程
    • 3.bctest.c
      • 3.1 注册服务,打开binder驱动
      • 3.2 获取服务
    • 4.binder_call

Android跨进程通信,IPC,RPC,Binder系统,C语言应用层调用()

1.概念

IPC,进程间通信,a进程发送数据给b进程,就是跨进程通信。

RPC,远程调用,a进程想打开led,点亮led,调用led_open函数,通过IPC发送数据给b进程,b取出数据,然后调用b进程的led_open函数,看似a进程来直接操作led_open函数一样,实际上是a发送数据给b,b操作硬件

b进程服务端程序要先向servicemanager注册服务,a进程查询led_服务,得到一个handle,指向进程b。

数据一般存在char buf[1024]里面。a,b进程通过buffer传递数据双端。

谷歌的源码参考目录

在这里插入图片描述

binder.c(谷歌封装好的c函数)

2.流程

servicemanager先由系统先运行,

  1. open binder驱动
  2. 告诉驱动程序自己就是servicemanager
  3. while(1)循环,读数据,读取驱动,获取数据,没有数据就休眠,得到数据就解析数据。
    • 服务端注册服务,在链表中记录服务名,
    • 客户端获取服务,查询链表中的服务,返回服务端进程

服务端程序:

  1. open驱动
  2. 注册服务,向servicemanager发送服务的名字,
  3. while(1)读驱动,无数据就休眠,解析数据,调用系统对应的底层函数,

客户端程序:

  1. open驱动。
  2. 获取服务,向servicemanager查询服务,获得一个handle,
  3. 向handle句柄发送数据。

打开驱动程序

在这里插入图片描述

告诉驱动程序自己就是servicemanager

在这里插入图片描述

循环读取数据,

在这里插入图片描述

binder_loop读数据,

在这里插入图片描述

解析数据

在这里插入图片描述

处理回复信息给客户端

在这里插入图片描述

客户端获取服务

在这里插入图片描述

注册服务

在这里插入图片描述

3.bctest.c

3.1 注册服务,打开binder驱动

在这里插入图片描述

注册服务,构造好数据

在这里插入图片描述

发给目标target

在这里插入图片描述

我们看一下这个值

在这里插入图片描述

在头文件中定义,句柄是0,进程间通信,0就是servicemanager进程,

在这里插入图片描述

通过binder_call调用,code: 表示要调用servicemanager中的"addservice"函数

3.2 获取服务

打开驱动, 循环查询服务列表

在这里插入图片描述

if (binder_call(bs, &msg, &reply, target, SVC_MGR_CHECK_SERVICE))
return 0;

还是调用binder_call函数,msg中含有你想获取服务的名字,含有servicemanager回复的数据,

4.binder_call

实现远程调用, 向谁发数据,

target,目的进程

code,调用的函数

msg,提供的数据参数

reply,返回值

构造我们要发送的数据,放在buffer中,用binder_io

调用ioctl发送数据。

int binder_call(struct binder_state *bs,struct binder_io *msg, struct binder_io *reply,uint32_t target, uint32_t code)
{int res;struct binder_write_read bwr;struct {uint32_t cmd;struct binder_transaction_data txn;} __attribute__((packed)) writebuf;unsigned readbuf[32];if (msg->flags & BIO_F_OVERFLOW) {fprintf(stderr,"binder: txn buffer overflow\n");goto fail;}writebuf.cmd = BC_TRANSACTION;writebuf.txn.target.handle = target;writebuf.txn.code = code;writebuf.txn.flags = 0;writebuf.txn.data_size = msg->data - msg->data0;writebuf.txn.offsets_size = ((char*) msg->offs) - ((char*) msg->offs0);writebuf.txn.data.ptr.buffer = (uintptr_t)msg->data0;writebuf.txn.data.ptr.offsets = (uintptr_t)msg->offs0;bwr.write_size = sizeof(writebuf);bwr.write_consumed = 0;bwr.write_buffer = (uintptr_t) &writebuf;hexdump(msg->data0, msg->data - msg->data0);for (;;) {bwr.read_size = sizeof(readbuf);bwr.read_consumed = 0;bwr.read_buffer = (uintptr_t) readbuf;//调用ioctl发送数据。bwr结构体res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);if (res < 0) {fprintf(stderr,"binder: ioctl failed (%s)\n", strerror(errno));goto fail;}res = binder_parse(bs, reply, (uintptr_t) readbuf, bwr.read_consumed, 0);if (res == 0) return 0;if (res < 0) goto fail;}fail:memset(reply, 0, sizeof(*reply));reply->flags |= BIO_F_IOERROR;return -1;
}

在这里插入图片描述

数据要转换,binder_io参数是这个类型,内核驱动要求res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);bwr是上图的类型。

ioctl收数据,也会收到binder_write_read,然后转化为binder_io

svcmgr_lookup看下面源码

uint32_t svcmgr_lookup(struct binder_state *bs, uint32_t target, const char *name)
{uint32_t handle;//binder_io对缓冲区的管理unsigned iodata[512/4];//初始化结构体binder_iostruct binder_io msg, reply;//初始化就可以在缓冲池里面放数据 了bio_init(&msg, iodata, sizeof(iodata), 4);bio_put_uint32(&msg, 0);  // strict mode headerbio_put_string16_x(&msg, SVC_MGR_NAME);bio_put_string16_x(&msg, name);//binder_io发送给驱动if (binder_call(bs, &msg, &reply, target, SVC_MGR_CHECK_SERVICE))return 0;handle = bio_get_ref(&reply);if (handle)binder_acquire(bs, handle);binder_done(bs, &msg, &reply);return handle;
}
http://www.hkea.cn/news/406514/

相关文章:

  • 国外建设工程招聘信息网站tool站长工具
  • 专业做相册书的网站电商网站建设制作
  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo
  • 网站上的代码网页怎么做的下载百度软件
  • 网站功能模块建设搜狗推广
  • 网站做推广有用吗网站页面设计
  • 做简报的网站广州搜发网络科技有限公司
  • 南乐县住房和城乡建设局网站制作网站的步骤是什么
  • 金华做网站最专业的公司搜易网提供的技术服务
  • wordpress适合门户网站吗怎么营销自己的产品
  • 常用的网站类型有哪些seo优化专员编辑
  • 网站专题框架怎么做海阳seo排名
  • 手机网站代码下载黄页网站推广服务
  • 做网站前端多少钱在线bt种子
  • wordpress+模版+推荐专业网站seo推广
  • 浦项建设公司员工网站2023免费推广入口
  • 如何查询某个网站的设计公司最新推广注册app拿佣金
  • 八宝山做网站公司打广告
  • wordpress vip查看插件南宁seo费用服务
  • 建站之星模板怎么设置手机如何做网站
  • 上海公司网站制作价格西安百度关键词排名服务
  • 长沙网页制作开发公司aso优化方案
  • 深圳罗湖网站制作成人电脑基础培训班
  • 无锡网站制作咨询深圳网站设计十年乐云seo
  • 大连城市建设网站seo优化顾问服务阿亮
  • 福州 网站建设沈阳seo关键词排名优化软件