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

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

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

The module supports several versions of the data format; see the Python module documentation for details.

Py_MARSHAL_VERSION

The current format version. See marshal.version.

void PyMarshal_WriteLongToFile(long value, FILE *file, int version)

long 型の整数値 value を file へ整列化します。この関数は value の下桁 32 ビットを書き込むだけです; ネイティブの long 型サイズには関知しません。 version はファイルフォーマットを示します。

この関数は失敗することがあり、その場合はエラー指示子を設定します。それを確認するために PyErr_Occurred() を使います。

注釈

In Python 3.15 and earlier, this function does not set the error indicator if writing to file fails. The same caveat applies as for PyMarshal_WriteObjectToFile().

void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version)

Python オブジェクト value を file へ整列化します。version はファイルフォーマットを示します。

この関数は失敗することがあり、その場合はエラー指示子を設定します。それを確認するために PyErr_Occurred() を使います。

注釈

In Python 3.15 and earlier, this function can write only part of the data to file and return without setting the error indicator, for example if value contains an object which cannot be marshalled or if writing to file fails (see gh-155907). Code which has to support these versions cannot rely on PyErr_Occurred() alone to know that all the data was written. It can use PyMarshal_WriteObjectToString() and write the result itself, or validate what was written.

PyObject *PyMarshal_WriteObjectToString(PyObject *value, int version)
戻り値: 新しい参照。

value の整列化表現が入ったバイト列オブジェクトを返します。version はファイルフォーマットを示します。

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

long PyMarshal_ReadLongFromFile(FILE *file)

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

エラーの場合、適切な例外 (EOFError) を設定し -1 を返します。

int PyMarshal_ReadShortFromFile(FILE *file)

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

エラーの場合、適切な例外 (EOFError) を設定し -1 を返します。

PyObject *PyMarshal_ReadObjectFromFile(FILE *file)
戻り値: 新しい参照。

読み出し用に開かれた FILE* 内のデータストリームから Python オブジェクトを返します。

エラーの場合、適切な例外 (EOFError, ValueError, TypeError) を設定し NULL を返します。

PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)
戻り値: 新しい参照。

Return a Python object from the data stream in a FILE* opened for reading. Unlike PyMarshal_ReadObjectFromFile(), this function assumes that no further objects will be read from the file, allowing it to aggressively load file data into memory so that the de-serialization can operate from data in memory rather than reading a byte at a time from the file. Only use this variant if you are certain that you won't be reading anything else from the file.

エラーの場合、適切な例外 (EOFError, ValueError, TypeError) を設定し NULL を返します。

PyObject *PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len)
戻り値: 新しい参照。

data が指す len バイトのバイト列バッファ内のデータストリームから Python オブジェクトを返します。

エラーの場合、適切な例外 (EOFError, ValueError, TypeError) を設定し NULL を返します。