概述
在Android的Sensor框架代码里看到BitTube,这里对其进行学习整理.
BitTube是用来处理进程间通讯的机制,和管道类似,主要是对socketpair的封装.先了解一下socketpair
socketpair
socketpair用来创建一对未命名、互相连接的套接字,套接字的一端可以进行读和写的操作,用来实现全双工的通讯.
函数原型:int socketpair(int domain, int type, int protocol, int sv[2]);
参数说明
1.domain在linux平台上只能使用AF_UNIX
2.type表示socket的类型,目前支持如下类型
/**
* enum sock_type - Socket types
* @SOCK_STREAM: stream (connection) socket
* @SOCK_DGRAM: datagram (conn.less) socket
* @SOCK_RAW: raw socket
* @SOCK_RDM: reliably-delivered message
* @SOCK_SEQPACKET: sequential packet socket
* @SOCK_DCCP: Datagram Congestion Control Protocol socket
* @SOCK_PACKET: linux specific way of getting packets at the dev level.
* For writing rarp and other similar things on the user level.
*
* When adding some new socket type please
* grep ARCH_HAS_SOCKET_TYPE include/asm-* /socket.h, at least MIPS
* overrides this enum for binary compat reasons.
*/
3.protocol 目前必须为0
4.sv[2] 代表两个互相连接的套接字.
通过socketpair实现不同进程之间的通讯极其简单,代码如下
//test in ubuntu 14.04 by helenxr
//step1:gcc socketpair.c
//step2:./a.out
/*test result like below:
create socketpair[3,4]
child process rcv msg:parent send to child.
parent rcv msg:parent send to child.
child process rcv msg:parent send to child.
parent rcv msg:parent send to child.
child process rcv msg:parent send to child.
parent rcv msg:parent send to child.
child process rcv msg:parent send to child.
parent rcv msg:parent send to child.
child process rcv msg:parent send to child.
parent rcv msg:paren