Sharing file descriptor using Android binder

2020-03-04 09:08发布

问题:

How can I share file descriptor across process using Android binder IPC in C++? Can you post example also?

回答1:

In client process we do the following to perform a binder transaction

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

data and reply are of type Parcel. marshall and unmarshalling is done in native android using Parcel objects. It has the functionality to marshall a file descriptor.

data.writeFileDescriptor(fd);

In server process (i.e, Service in android), we call the following method to read the file descriptor in the server process.

int fd = data.readFileDescriptor();

sharing the file descriptor across process will be handled by the binder driver.

Important : duplicate the received file descriptor before the parcel object is destroyed.

You can find the implementation and explanation for native binder at Android-HelloWorldService