3

サードパーティ ライブラリ (FUSE など) を使用せずに、OSX (10.8 以降) のユーザー空間を介してブロック デバイスを作成する方法はありますか?

ユーザー空間ツールを作成しようとしています。アイデアは、ユーザーがツールにファイルを提供し、ツールが仮想インターフェイスを作成するというものです。インターフェイスが書き込まれるたびに、ツールは操作をデータに適用してから、元のファイルに書き込みます。インターフェイスが読み取られるたびに、ツールは元のファイルから読み取り、逆の操作を適用します。

ブロックデバイスは必ずしも必要ではありません。ツールは、ファイルとして扱うことができるある種の仮想インターフェイスを作成する必要があります。つまり、別のアプリケーションで開いたり保存したりできます。

I/O Kit のユーザー空間ルーチンを調べましたが、仮想 USB/FireWire/MMC/SCSI デバイスを作成するのは過剰なようで、適用できるものはありませんでした。

4

1 に答える 1

2

カーネル空間に入らずに私が考えることができる最も近いものは、fifoまたは名前付きパイプです-これは本質的にファイル名を持つパイプです。残念ながら、パイプであるため、シークすることはできません。たとえば、あるプロセスでの読み取りと別のプロセスでの書き込みのためにFIFOを開くことができます。mkfifoこれらは、コマンドラインユーティリティまたはmkfifo() C関数を使用して作成します。

UNIXドメインソケットもあります。これはIPソケットに似ていますが、ネットワーク構造ではなくファイル名で識別されます。これらは両端から読み書きできますが、シークはできません。

vnode(OSXでのファイルのカーネル内表現)のops関数を実際に実装することに関しては、カーネルにドロップする必要があると思います。ブロックデバイスを作成するためにI/Oキットは厳密には必要ないことに注意してください。BSDデバイスノードで十分であり、ハードウェアやボリュームの取り出しなどのサポートが必要ない場合は、を使用してノードを作成bdevsw_add()し、パラメータとしてのopsベクトル。(I / Oキットベースのストレージデバイスの場合、IOMediaBSDClientこれは自動的に行われ、でキャラクターデバイスが作成cdevsw_add_with_bdev()されます)もう1つの、かなり複雑なオプションは、独自のファイルシステムを実装することです。

于 2013-03-18T10:49:56.070 に答える