英語版
このページの英語版を見る

std.mmfile

メモリマップファイルを読み書きする。
メモリー・マップド・ファイルは、オペレーティング・システムにおいて、仮想メモリーを介してファイル・アクセスを可能にするメカニズムである。 ファイルへのアクセスを可能にするオペレーティング・システムの仕組みである。ファイルをMmFile 、 でファイルを開いた後、標準的なスライス/ポインタ操作で内容を読み書きできる。 メモリへの変更は、その下にあるファイルに自動的に反映される。
メモリ・マッピングは、 や からのバッファード・リード/ライト操作に比べて、大容量ファイルのI/O性能を向上させることができる。 std.file std.stdio しかし、I/Oエラーはそれほど安全には処理されない。 例えば、ファイルがあるディスクが削除された場合などである、 例えば、ファイルがあるディスクが削除された場合、そこから読み出すとセグメ ント・フォールトが発生する可能性がある。
Authors:
Walter Bright, Matthew Wilson

出典 std/mmfile.d

class MmFile;
MmFileオブジェクトは、メモリー・マップド・ファイル・リソースを制御する。
Examples:
既存のファイルを読み込む
import std.file;
std.file.write(deleteme, "hello"); // deleteemeは一時的なファイル名である
scope(exit) remove(deleteme);

// この関数の最後にファイルが閉じられるように、スコープ・クラスを使用する
scope mmfile = new MmFile(deleteme);

writeln(mmfile.length); // "hello".length

// スライス演算子を使ってファイルの内容にアクセスする
// これは`void[]`として型付けされているので、`char[]`または`ubyte[]`にキャストして使用する
const data = cast(const(char)[]) mmfile[];

// この時点では、ファイルの内容はまだ読み込まれていないかもしれない。
// その場合、次のようなメモリーアクセスが
// 意図的にページフォールトを引き起こし、カーネルにファイルの内容をロードさせる
writeln(data[0 .. 5]); // "hello"
Examples:
新しいファイルを書き込む
import std.file;
scope(exit) remove(deleteme);

scope mmfile = new MmFile(deleteme, MmFile.Mode.readWriteNew, 5, null);
writeln(mmfile.length); // 5

auto data = cast(ubyte[]) mmfile[];

// このメモリへの書き込みはファイルの内容に反映される
data[] = '\n';

mmfile.flush();

writeln(std.file.read(deleteme)); // "\n\n\n\n\n"
enum Mode: int;
メモリマップファイルを開くモード。
read
既存のファイルを読む
readWriteNew
既存のファイルを削除し、新しいファイルを書き込む
readWrite
既存のファイルを読み書きし、存在しない場合は作成する。
readCopyOnWrite
既存のファイルを読み書きする。
scope this(string filename);
メモリ・マップド・ファイル filename を読み込み用にオープンする。 オブジェクト・インスタンスが削除されると、ファイルはクローズされる。
Throws:
scope this(string filename, Mode mode, ulong size, void* address, size_t window = 0);
モードでメモリー・マップド・ファイル filename を開く。 オブジェクト・インスタンスが削除されるとファイルはクローズされる。
Parameters:
string filename ファイル名。 NULLの場合、匿名ファイル・マッピングが作成される。
Mode mode 上記で定義したアクセス・モード。
ulong size ファイルのサイズ。0なら、既存のファイルの 既存のファイルのサイズとみなされる。
void* address ファイルをマッピングする優先アドレス、 ただし、システムはこれを指定する必要はない。 NULLの場合、システムは最も便利なアドレスを選択する。
size_t window 一度にマップするデータ量のブロックサイズを指定する。 で、0はファイル全体をマップすることを意味する。ウィンドウ・サイズは ウィンドウ・サイズは、メモリ割り当てページ・サイズの倍数でなければならない。
Throws:
const @property ulong length();
メモリマップされたファイルのサイズをバイト数で示す。
alias opDollar = length;
length に転送する。
Mode mode();
ファイルモードを返す読み取り専用プロパティ。
void[] opSlice();
ファイルの内容全体を配列として返す。
void[] opSlice(ulong i1, ulong i2);
ファイル内容のスライスを配列として返す。
ubyte opIndex(ulong i);
ファイルのインデックスiのバイトを返す。
ubyte opIndexAssign(ubyte value, ulong i);
ファイルのインデックスiのバイトを値に設定して返す。