• ベストアンサー

ソケットディスクリプタを別プロセスで使いたい

プロセスAで作成したディスクリプタをプロセスBで使いたいのですが 別プロセスへディスクリプタを関連付けたりって出来るのでしょうか? Aで作成->Bで使えるようにする->Aをクローズ->Bで使う このようにしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • chirubou
  • ベストアンサー率37% (189/502)
回答No.1

fopk() や exec() で渡すというのではなくて、ということですよね?出来るか出来ないかは完全に OS 依存です。 例えば Linux だと、ソケットに限らず任意のファイル記述子を、あるプロセスから別なプロセスに Unix ソケット経由で渡すことができます。ちょっとトリッキーというか、すこしプログラムが面倒ですが。 参考 URL のページ中程、「例をあげると、 Linux はこの補助データのメカニズムを、 Unix ソケット上での拡張エラーや IP オプション、 ファイル・ディスクリプタの受け渡しに利用している」とあります。私は実際に使っています。 もちろん、同じホスト内でのプロセス間での話で、Inet のソケットではできません。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/recv.2.html
herbest
質問者

お礼

すみません、なかなか時間が取れなくて試せていません。 やり方が少しややこしいので、今後ログを読む人の為に解決法を書いて締め切ろうと思っていたのですが、 あまり放置するのは回答して頂いた方に失礼ですのでひとまず終わらせて頂きます。 おそらく回答いただいたUnixソケットの機能の一部を利用する事で解決出来そうです。 お礼が遅くなりすみません。

herbest
質問者

補足

おおお、ソケットでそんな物まで渡せるとは。 OSというか実行環境はcygwin上なので多分行けると思います。ちょっと試してみます。 forkやexecで渡す、と言うのはfork()"前"にディスクリプタを作るとう事ですよね。 今回はforkした"後"に親プロセスで作ったのを子プロセスで使用したいので、最初から 別プロセスという考えでいます。

すると、全ての回答が全文表示されます。

関連するQ&A