进程通讯

jni中的进程通讯的另一种实现方式

你说的曾经没有我的故事 提交于 2019-12-06 20:26:17
在adb shell中执行ps命令常看到后台进程,这些后台进程很多都是在JNI层创建的,并非普通的Android进程,那么问题来了,如何让进程通讯呢? 方式有很多种。 1. 创建socket进行通讯,“127.0.0.1”+ 特定的端口号。这种方式很常用。 2. 管道,父进程和子进程是可以通过管道来读写数据的。这个比较常用。 3. 直接写入特定的文件,这也是本博文要介绍的一种实现,这个估计用的很少,但是在某些情况下使用很有意思,尤其是对主进程来说,只需要写入文件。 Android是从Linux上修改过来的,Linux上不少api也是能够直接在Android上使用的,inotify就是其中一个,用于监控文件系统中的事件。当子进程监控特定的文件,父进程写入该文件时,子进程是能获取到该文件被修改的事件的,也就能直接读取文件中的内容了。以下是代码片段 size_t readBytes = read(fileDescriptor, p_buf, EVENT_BUF_LEN); int k = 0; while (k < readBytes){ struct inotify_event *event = ( struct inotify_event * )(p_buf + k); if (event->len > 0){ kesyPrintf("event.name=%s\n", event-