私が立ち上げた私の子プロセスから、ある接頭辞でファイル名を傍受できるようにしたい。これは "pipe:// pipe_name"のような名前になります。私はopen()システムコールをラップすることは私のアプリケーションでこれを行う良い方法だろうと思っていますが、をで実行したいのですが、別の共有ライブラリをコンパイルしてLD_PRELOADトリックでフックするforkを呼び出す前にシステム関数を無効にすることはできますか?
私は自分自身でプロセスをフォークしていますが、open()をフォークする前に私自身の関数にリダイレクトしてexec()の後で子プロセスを持続させる方法がありますか?
編集:これの背後にある考え方は、中間のプロセスtee()を使用して複数のリーダーパイプを実装し、あるパイプから他のすべてのパイプにデータを送りたいということです。私はのようにこれは私の子プロセスに透過的であるため、ファイル名とopen()を取ることができ、パイプの場合はファイル記述子を返します。ファイル、私はそれを通常のopen()関数に渡します。子プロセスに透過的にするこれを行う他の方法は、聞くのが面白いでしょう。あらかじめリンクされていなければならない別のライブラリをコンパイルする必要はありません。
実行しているプロセスを制御できますか?意味はあなたのコードですか? – hek2mgl
理論的にはそうですが、バイナリで使える解決策が欲しいです... –
LD_PRELOADのトリックがなければ、それは可能ではないと思います。それを使用すると正常に動作するはずです。 – hek2mgl