メモリにマップされたファイルオブジェクトは、
文字列とファイルオブジェクトの両方のように振舞います。
しかし通常の文字列オブジェクトとは異なり、これらは可変です。
文字列が期待されるほとんどの場所でmmapオブジェクトを利用できます。
例えば、メモリマップファイルを探索するために
reモジュールを使うことができます。
それらは可変なので、 obj[index] = 'a'
のように文字を
変換できますし、スライスを使うことで
obj[i1:i2] = '...'
のように
部分文字列を変換することができます。
現在のファイル位置をデータの始めとする読込みや書込み、
ファイルの異なる位置へseek()することもできます。
メモリマップファイルはUnix上とWindows上とでは異なる mmap()関数によって作られます。 いずれの場合も、開いたファイルのディスクリプタを、 更新のために提供しなければなりません。 すでに存在するPythonファイルオブジェクトをマップしたい場合は、 filenoパラメータのための現在値を手に入れるために、 fileno()メソッドを使用して下さい。 そうでなければ、ファイル・ディスクリプタを直接返すos.open()関数 (呼び出すときにはまだファイルが閉じている必要があります)を使って、 ファイルを開くことができます。
関数のUnixバージョンとWindowsバージョンのために、 オプションのキーワード・パラメータとしてaccessを指定する ことになるかもしれません。 accessは3つの値の内の1つを受け入れます。 ACCESS_READは読み込み専用、 ACCESS_WRITEは書き込み可能、 ACCESS_COPYはコピーした上での書き込みです。 accessはUnixとWindowsの両方で使用することができます。 accessが指定されない場合、Windowsのmmapは書き込み可能マップを返します。 3つのアクセス型すべてに対する初期メモリ値は、 指定されたファイルから得られます。 ACCESS_READを割り当てたメモリマップは TypeError例外を送出します。 ACCESS_WRITEを割り当てたメモリマップは メモリと元のファイルの両方に影響を与えます。 ACCESS_COPYを割り当てたメモリマップは メモリに影響を与えますが、元のファイルを更新することはありません。
fileno, length[, tagname[, access]]) |
0
の場合、マップの最大の長さは
Windowsが空ファイルで例外を起こす(Windowsでは空のマップを作成すること
ができません。)ことを除いては、
mmap()が呼ばれたときのファイルサイズになります。
tagnameは、None
以外で指定された場合、
マップのタグ名を与える文字列となります。
Windowsは同じファイルに対する様々なマップを持つことを可能にします。
既存のタグの名前を指定すればそのタグがオープンされ、
そうでなければこの名前の新しいタグが作成されます。
もしこのパラメータを省略したりNone
を与えたりしたならば、
マップは名前なしで作成されます。
タグ・パラメータの使用の回避は、あなたのコードをUnixとWindowsの間で
移植可能にしておくのを助けてくれるでしょう。
fileno, length[, flags[, prot[, access]]]) |
flagsはマップの種類を指定します。 MAP_PRIVATEはプライベートなcopy-on-write(書込み時コピー) のマップを作成します。 従って、mmapオブジェクトの内容への変更はこのプロセス内にのみ有効です。 MAP_SHAREDはファイルの同じ領域をマップする他のすべてのプロセス と共有されたマップを作成します。 デフォルトはMAP_SHAREDです。
protが指定された場合、希望のメモリ保護を与えます。 2つの最も有用な値は、PROT_READとPROT_WRITEです。 これは、読込み可能または書込み可能を指定するものです。 protのデフォルトはPROT_READ | PROT_WRITEです。
accessはオプションのキーワード・パラメータとして、 flagsとprotの代わりに指定してもかまいません。 flags,protとaccessの両方を指定することは間違っています。 このパラメーターを使用法についての情報は、 accessの記述を参照してください。
メモリマップフィイルオブジェクトは以下のメソッドをサポートしています:
) |
string[, start]) |
-1
を返します。
startは探索を始めたい場所のインデックスで、デフォルトは0です。
[offset, size]) |
dest, src, count) |
num) |
) |
) |
newsize) |
pos[, whence]) |
0
(絶対位置)です。
その他の値として、1
(現在位置からの相対位置)と
2
(ファイルの終わりからの相対位置)があります。
) |
) |
string) |
byte) |
1
だけ進みます。
もしmmapがACCESS_READで作成されていた場合、
書き込み時にTypeError例外が送出されるでしょう。