5.4 データ整列化 (data marshalling) のサポート

以下のルーチン群は、marshal モジュールと同じ形式を使った 整列化オブジェクトを C コードから使えるようにします。 整列化形式でデータを書き出す関数に加えて、データを読み戻す関数 もあります。整列化されたデータを記録するファイルはバイナリモードで 開かれていなければなりません。

数値は最小桁が先にくるように記録されます。

このモジュールでは、二つのバージョンのデータ形式をサポートしています。 バージョン 0 は従来のもので、(Python 2.4 で新たに追加された) バージョン 1 は intern 化された文字列をファイル内で共有し、逆マーシャル化の時にも 共有されるようにします。PY_MARSHAL_VERSION は現在のバージョン (バージョン 1) を示します。

void PyMarshal_WriteLongToFile(long value, FILE *file, int version)
long 型の整数値 valuefile へ整列化します。 この関数は value の下桁 32 ビットを書き込むだけです; ネイティブの long 型サイズには関知しません。

バージョン 2.4 で 変更 された仕様: ファイル形式を示すversion が追加されました

void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)
Python オブジェクトvaluefile へ整列化します。

バージョン 2.4 で 変更 された仕様: ファイル形式を示すversion が追加されました

PyObject* PyMarshal_WriteObjectToString(PyObject *value, int version)
戻り値: 新たな参照.
value の整列化表現が入った文字列オブジェクトを返します。

バージョン 2.4 で 変更 された仕様: ファイル形式を示すversion が追加されました

以下の関数を使うと、整列化された値を読み戻せます。

long PyMarshal_ReadLongFromFile(FILE *file)
読み出し用に開かれた FILE* 内のデータストリームから、 C の long 型データを読み出して返します。 この関数は、ネイティブの long のサイズに関係なく、 32 ビットの値だけを読み出せます。

int PyMarshal_ReadShortFromFile(FILE *file)
読み出し用に開かれた FILE* 内のデータストリームから、 C の short 型データを読み出して返します。 この関数は、ネイティブの short のサイズに関係なく、 16 ビットの値だけを読み出せます。

PyObject* PyMarshal_ReadObjectFromFile(FILE *file)
戻り値: 新たな参照.
読み出し用に開かれた FILE* 内のデータストリームから、 Python オブジェクトを読み出して返します。 エラーが生じた場合、適切な例外 (EOFError または TypeError) を送出して NULLを返します。

PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file)
戻り値: 新たな参照.
読み出し用に開かれた FILE* 内のデータストリームから、 Python オブジェクトを読み出して返します。 PyMarshal_ReadObjectFromFile() と違い、この関数は ファイル中に後続のオブジェクトが存在しないと仮定し、ファイルから メモリ上にファイルデータを一気にメモリにロードして、逆整列化機構が ファイルから一バイトづつ読み出す代わりにメモリ上のデータを操作 できるようにします。対象のファイルから他に何も読み出さないと 分かっている場合にのみ、この関数を使ってください。 エラーが生じた場合、適切な例外 (EOFError または TypeError) を送出して NULLを返します。

PyObject* PyMarshal_ReadObjectFromString(char *string, Py_ssize_t len)
戻り値: 新たな参照.
string が指しているlen バイトの文字列バッファに納められた データストリームから Python オブジェクトを読み出して返します。 エラーが生じた場合、適切な例外 (EOFError または TypeError) を送出して NULLを返します。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。