私は、メモリ マップされたデータに対して透過的にデータ変換を行う手法を試してきました。アイデアは、基本的に、目的のファイルをメモリ マップし、読み取り/書き込み保護された 2 番目の匿名領域を作成することです。ユーザーが匿名領域にアクセスすると、結果として生じる segfault がキャッチされ、データが変換され、アクセスを続行できるようにアクセス許可が変更されます。
うまく機能しますが、1 つだけ問題があります。最初にデータに触れずに write() のようなシステム コールにポインターを渡すと、segfault ハンドラーはトリガーされません。代わりに、パーミッションを修正するためにハンドラーが呼び出されないため、単に EFAULT が返されます。問題が発生したときに、システム コールでユーザー空間ハンドラを使用する方法はありますか?