26

ほとんどのUNIXシステムでは、プロセス間で開いているファイルを渡すことは、fork()によって子/親プロセスに対して簡単に行うことができます。ただし、子がすでにフォークされた「後」にfdを共有する必要があります。

sendmsg()が任意のプロセスで機能する可能性があることを示すWebページをいくつか見つけました。しかし、それは非常にOSに依存し、複雑に思えます。portlistenは私が見つけることができる最良の例のようですが、kqueue、pool、...のすべての魔法を隠すlibeventのような優れたラッパーライブラリを好みます。

これを行うためのライブラリ(およびポータブルな方法)があるかどうか誰かが知っていますか?

4

2 に答える 2

18

最善の策は、Unix ドメイン ソケットを介してファイル記述子を送信することです。これは、Stephens と Web のいくつかの場所で説明されていますが、質問があれば、コードを掘り下げることができます。

これは、最近ではかなり移植性があります。「移植不可能」と見なされていたもの ( mmap! など) の多くは、現在では非常に一般的です。「最近のほとんどのシステム」よりも移植性を高める必要がある場合は、多くの興味深い問題が待ち構えていますが、おそらく、何をしているか、どのプラットフォームで作業しているかについて詳しく教えていただければ (おそらく非 Unix POSIX プラットフォーム?) 私たちが手助けできるかもしれません。

于 2009-05-26T06:13:30.843 に答える
13

sendmsg()システムコールを使用して、プロセス間でファイル記述子 (ソケットなど - もちろんメモリマップはできません) を転送するための Unix ドメインソケットベースのメカニズムがあります。

詳細については、Stevens (Curt Sampson が言及) とWikipediaを参照してください。

Sending file descriptor by Linux socketで、作業コードに関するより最近の質問を見つけることができます。

于 2009-05-26T06:20:22.593 に答える