使用Android Binder共享文件描述符

5

如何在C++中使用Android Binder IPC跨进程共享文件描述符?你能够提供示例代码吗?

1个回答

7
在客户端进程中,我们执行以下步骤来执行绑定器事务。
remote()->transact(MYTRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);

data和reply的类型是Parcel。使用Parcel对象在原生Android中执行marshalling和unmarshalling操作。它具有将文件描述符进行marshalling的功能。

data.writeFileDescriptor(fd);

在服务器进程中(即安卓服务中),我们调用以下方法来读取服务器进程中的文件描述符。
int fd = data.readFileDescriptor();

共享文件描述符跨进程将由binder驱动程序处理。

重要提示:在包裹对象被销毁之前,复制接收到的文件描述符。

您可以在Android-HelloWorldService中找到本地binder的实现和解释。


在包对象被销毁之前复制接收到的文件描述符是什么意思? - Lewis Z
1
我明白了。在执行 mmap 操作时,我总是收到非法 fd 错误,直到我使用 dup 系统调用来复制 fd。你的“注意”语句真的很重要!!! - Lewis Z

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接