2009-05-26 22 views
21

fork()によって子プロセスまたは親プロセスに対してプロセス間でオープンファイルを渡すほとんどのUNIXシステムでは、しかし、私は子供がすでにフォークされている "後"のfdを共有する必要があります。異なるプロセス間でファイル記述子を渡す移植可能な方法

私は、sendmsg()が任意のプロセスで動作するかもしれないと私に伝えているものがあることを発見しました。しかし、それは非常にOSに依存し複雑なようです。 、portlistenは私が見つけることができる最良の例のように思えるが、私はたkqueue、プールのすべての魔法を隠しlibeventのような良いラッパーライブラリを好む....

いくつかのライブラリー(およびポータブルがあるかどう誰もが知っていますこれを行うには?

+0

[Unixドメインソケットの特定](http://www.techdeviancy.com/uds.html) – mgalgs

答えて

12

私は(別の質問から)良いライブラリが見つかりました:libancillary。これは私が必要とするものです!

+1

それは答えではありません。 – LtWorf

13

あなたの最善の策は、Unixドメインソケットを介してファイルディスクリプタを送信することです。これはStephensとWeb上のいくつかの場所で説明されていますが、うまくいけばコードを掘り下げることができます。

これは最近かなり移植性があります。多くのものが「非ポータブル」な方法で戻ったとき(例えば、mmap!)は非常に一般的です。 「最近のほとんどのシステム」よりも移植性が必要な場合は、先に面白い問題がたくさんありますが、自分が行っていることや作業しているプラ​​ットフォームUnixのPOSIXプラットフォームではないかもしれませんか?)私たちは援助できるかもしれません。

+0

で「ファイルディスクリプタの受け渡し」を検索するsendmsg()の使用に関する質問はまだあります。私は、最初のパラメータとしてドメインソケットを入れて十分だと思ったが、私はまだドメインソケットのsockaddr_unとしてmsghdr.msg_nameを埋める必要があるようだ - なぜ?とにかくそれを防ぐために? – Francis

10

sendmsg()システムコールを使用して、プロセス間でファイルディスクリプタ(ソケットはメモリマッピングできないなど)を転送するためのUnixドメインソケットベースのメカニズムがあります。

詳しくは、Stevens(Curt Sampsonの言葉)、Wikipediaにあります。

作業コードでもっと最近の質問がSending file descriptor by Linux socketにあります。

関連する問題