5

C ++でAndroidバインダーIPCを使用して、プロセス間でファイル記述子を共有するにはどうすればよいですか?例も投稿できますか?

4

1 に答える 1

7

クライアント プロセスでは、バインダー トランザクションを実行するために次のことを行います。

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

データと返信はパーセル型です。マーシャリングとアンマーシャリングは、Parcel オブジェクトを使用してネイティブ android で行われます。ファイル記述子をマーシャリングする機能があります。

data.writeFileDescriptor(fd);

サーバー プロセス (つまり、android のサービス) では、次のメソッドを呼び出して、サーバー プロセスでファイル記述子を読み取ります。

int fd = data.readFileDescriptor();

プロセス間でのファイル記述子の共有は、バインダー ドライバーによって処理されます。

重要: パーセル オブジェクトが破棄される前に、受信したファイル記述子を複製してください。

Android-HelloWorldServiceで、ネイティブ バインダーの実装と説明を見つけることができます。

于 2013-02-06T07:58:49.773 に答える