フォークを使わずに2つのプロセスの間でパイプを使用し、ソケットなどのファイル記述子を共有できますか?私は別の解決策を必要としません、私は2つのプロセスの間にパイプを必要としません。パイプをフォークなしで使用できますか?
7
A
答えて
9
名前付きパイプ(FIFO)を使用することができます:あなたがmkfifo <common path>
を行う場合は、両方のプロセスでの使用にこのパスを、読み取り用と書き込み用1、
を。それから、あなたは普通のパイプと同じ振る舞いをします。
4
最も簡単な解決策は、名前付きパイプを使用することです。名前付きパイプは、ファイルシステム内に名前を持ち、両方のプロセスが名前付きパイプを参照できるようにします。名前付きパイプはmkfifo()
コールで作成され、open()
(1つのプロセスは読み込み用に開き、もう1つは書き込み用に開く必要があります)で開きます。
でも無関係の2つのプロセスで匿名パイプを使用しますが、パイプを作成したプロセスから開いているファイル記述を何らかの形で他のプロセスに渡す必要があります。これを行うには、UNIXドメインソケットでSCM_RIGHTS
メッセージを使用しますが、UNIXドメインソケットを使用している場合は、それを使用してパイプの代わりに通信することができます。 Linux固有の方法は、2番目のプロセスが最初のプロセスでパイプの終わりを表す/proc/<pid>/fd/<fd>
シンボリックリンクにopen()
を使用することですが、これはかなりバロックです。
関連する問題
- 1. パイプ、フォーク、ノンブロッキングIPC
- 2. パイプとフォークのトラブル
- 3. C++のパイプとフォーク
- 4. フォークexecとbashスクリプト付きパイプ
- 5. パイプをJavascriptまたはTypescriptで使用できますか?
- 6. angular2のテンプレートで '=='をパイプ(|)で使用できますか?
- 7. Cフォークとパイプはファイルから数値を追加します
- 8. OCamlでパイプを使用することはできますか?
- 9. フォークを使用してアプリケーション間でherokuデータベースを移行できますか?
- 10. 角度2のコードでパイプを使用できますか?
- 11. Cのパイプ、フォーク、シェルのコマンド
- 12. フォーク後にパイプを作成する
- 13. Windowsのバッチファイルでフォークできますか?
- 14. パイプとフォークが間違った出力になります
- 15. フォークするか、フォークしないのですか?
- 16. パイプとフォークを使ってbcを使う
- 17. pipe()を使用して作成されたパイプを双方向パイプとして使用できないのはなぜですか?
- 18. Executors.newWorkStealingPool()を使用して再帰的なフォーク結合ソリューションを記述することはできますか?
- 19. WCF、PipeExceptionで名前付きパイプを使用していますか?
- 20. パイプ演算子をOR文として使用できますか?
- 21. Posixのフォークとパイプを使用するためのNativeCallコードが機能していない
- 22. fifoファイル/名前付きパイプはいつ使用しますか?
- 23. Gitフォークを使用する
- 24. redux-sagaいつフォークを使用しますか?
- 25. ロケールフォーマットの日付パイプを使用できません
- 26. パイプ上でstdinを使用したときのselect()の動作
- 27. gom core.editorとしてkomodo editを使用することはできますか(つまり、フォークせずに)?
- 28. 使用Iは、Linuxでのパイプについて読んでてきたパイプ
- 29. findコマンドでパイプを使用する
- 30. パイプでffmpeg -sseofを使用する
@pst UNIXソケットは、 'connect()'、 'accept()'など全く違った方法でアクセスされます。 – glglgl