Linux下基本的通信方式有如下8种:
1. 管道pipe: 进程需要共同祖先
2. 命名管道named pipe, 也就是fifo: 文件系统中有对应文件名
3. mapped memory:把一个共享的文件映射到自己的进程地址空间
4. 消息队列:信息量大,格式灵活
5. 共享内存:速度最快
6. 信号量:同步手段
7. socket:最灵活
8. signal:比较复杂,携带的信息量少
IPC/网络通信系统:(不限于Linux)
1. CORBA
2. DCOM
3. 数据通信设备DCE
4. SOAP
5. XML-RPC
6. Binder (Android中用的IPC机制)
.....
n. DBus
DBus 以GPL许可证发行。
DBus 底层是基于Socket的, Unix域的socket, 为了提高通信速度, 去掉了socket的循环等待机制。
三层框架: 接口层(提供函数接口库), 总线层(提供守护程序)和封装层(不同平台封装)。
在很多平台上都做了封装: 比如QT上有dbus-qt, 在glib上有dbus-glib。
DBus的三要素:
对象:对象是封装后的匹配器与回调函数,它以对等协议使每个消息都有一个源地址和一个目的地址。这些地址又称为对象路径,或者称之为总线名称。对象的接口是回调函数,类似C++的虚拟函数实现。当一个进程注册到某个总线时,都要创建相应的消息对象。
消息:D-Bus的消息包括:signals,method calls,method returns, errors。
服务:进程注册的抽象。进程注册某个地址后,即可获得对应总线的服务。
DBus具体实现和调试的文章, 网上介绍很多,这里就不详述了。