基于4.4主要分析adb通讯
adb准备篇
一.socketpair (双向通讯的管道)
1. Linux环境下使用socketpair函数创造一对未命名的、相互连接的UNIX域套接字。
2. window平台模拟了一套socketpair。主要用到的结构如下
struct SocketPairRec
{
BipBufferRec a2b_bip;
BipBufferRec b2a_bip;
...
}
struct BipBufferRec,
{
HANDLE evt_write; 是否可以写
HANDLE evt_read; 是否有需要读数据
unsigned char buff[ BIP_BUFFER_SIZE ]; 读写的数据存放buffer
...
}
通过evt_write, evt_read表示是否有读写事件发生
二. fdevent系统
一套方便的跨平台io多路复用的接口。Adb模拟了一套
1. 主要接口
fd加到fdevent系统中,当fd有信号后,会触发func回调
typedef void (*fd_func)(intfd, unsigned events, void *userdata);
void fdevent_install(intfd, fd_func func, void *arg);
设置fd关心的事件(读写)
void fdevent_add(intfd,unsigned events);
void fdevent_del(intfd,unsigned events);
fdevent循环
void fdevent_loop();
2. fdevent_loop伪实现:
(1.)填充需要等待的evntlist(是否关心这个fd的读写事件)
(2.) Wait (eventlist) 等待事件触发