一年前,我写了一篇关于这个话题的调查.这是它的一部分:
2 Unix IPC机制
Unix IPC机制包括:
> Unix信号.
> Unix管道.
> Unix域套接字.
同时Android System-V IPC机制不包含在Android中.
仿生故意不提供对System-V IPC机制的支持,例如
由semget(),shmget(),msgget()提供的.这样做的原因是为了避免拒绝 –
服务[11].
2.1 Unix信号
关于unix信号如何工作的最佳解释之一我们可以在wikipedia找到:“A
信号是一种有限形式的进程间通信,用于Unix,类Unix和
其他符合POSIX标准的操作系统.基本上它是一个异步通知
发送到进程以便通知它发生的事件.当信号是
发送到进程,操作系统中断进程的正常执行流程 –
灰.在任何非原子指令期间都可以中断执行.如果过程有
以前注册了一个信号处理程序,该例程被执行.否则默认
执行信号处理程序.“
似乎unix信号在Android编程中被随后使用.此外,
有些信号在debug mode年被禁用.但是,它可能是IPC
机制.
2.2 Unix管道
Pipe是一种允许直接连接输出流的通信机制
一个进程与另一个进程的输入stread.有两种类型的unix
管道:命名管道和未命名管道.似乎只在Android编程中
使用命名管道.在这种情况下,两个进程使用特殊文件进行交互
连接输出和输入.应该提到管道是单向的
沟通,即一个过程始终是读者,第二个过程始终是作家.
必须在Linux文件系统上创建通信文件,因为sdcard的FAT32
不允许创建管道.以下是如何创建命名的unix管道的示例
并在Android中使用(俄语).可以在here找到此示例的源代码.
2.3 Unix域套接字
Unix域套接字,与unix管道相反,允许传输信息
两种方式:从服务器到客户端,从客户端到服务器. Unix域套接字
和unix管道使用文件系统作为地址名称空间.这意味着服务器和
客户端使用特殊文件建立通信.考虑到Android有两个
用于编程unix域套接字的类:LocalServerSocket和
LocalSocket.所有的实现都可以围绕这两个类构建
不需要使用本机代码来创建unix域套接字.一个简单的例子如何
使用unix域套接字显示为here.
[11] Android ndk文档. android-ndk-r6b的NDK文档