【问题标题】:Sharing file descriptor using Android binder使用 Android binder 共享文件描述符
【发布时间】:2013-01-03 01:00:39
【问题描述】:

如何在 C++ 中使用 Android binder IPC 跨进程共享文件描述符?你也可以发布示例吗?

【问题讨论】:

    标签: android android-binder


    【解决方案1】:

    在客户端进程中,我们执行以下操作来执行绑定事务

    remote()->transact(MYTRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
    

    数据和回复是包裹类型。编组和解组是在原生 android 中使用 Parcel 对象完成的。它具有编组文件描述符的功能。

    data.writeFileDescriptor(fd);
    

    在服务器进程(即android中的Service)中,我们调用如下方法 在服务器进程中读取文件描述符。

    int fd = data.readFileDescriptor();
    

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

    重要:在parcel对象被销毁之前复制接收到的文件描述符。

    您可以在以下位置找到本机绑定器的实现和解释 Android-HelloWorldService

    【讨论】:

    • 在parcel对象被销毁之前复制接收到的文件描述符是什么意思?
    • 我明白了。在我使用 dup 系统调用复制 fd 之前,我在执行 mmap 时总是遇到非法 fd 错误。你的“注意”声明真的很重要!!!
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2012-12-03
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多