記述子がカスタマイズ可能な動作を持つファイルを作成したいと思います。特に、ファイル記述子を作成したいと思います。これは、書き込まれると、すべての行の前にプロセスの名前と pid (およびおそらく時間) が追加されますが、他のことを行うのに役立つと想像できます。
書き込みプログラムを変更したくありません - 1 つには、シェル/perl/etc でさえ、システム上のすべてのプログラムで動作するようにしたいということです。すべてのソース コードを変更することは、不可能ではないにしても非現実的です。
この場合、パイプは機能しないことに注意してください。書き込みプロセスfork()
が s の場合、新しく作成された子は fd を共有し、パイプの読み取り側では親と区別できないためです。
行うアプローチはありますが、かなり不器用だと思います:
- そのような fd を作成するカーネル モジュールを作成します。たとえば、いくつかを開いて
/dev/customfd
から、モジュールに何らかの変換などを行うように指示したり、ユーザー空間やソケットなどにデータを送信したりすることができます。 - fd操作関数をオーバーライドし、「特別な」fdでこれらの種類のことを行うLD_PRELOADを使用します。
ただし、これらのアプローチはどちらも非常に手間がかかるため、より良い方法や、役立つインフラストラクチャ (市販のライブラリなど) があるかどうかを知りたいと思います。
カーネルの変更を伴わない解決策を望んでいますが、必要に応じて受け入れる準備ができています。
単なるアイデア: FUSE は答えになるでしょうか?