Підтримка маршалінгу даних

Ці процедури дозволяють коду C працювати з серіалізованими об’єктами, використовуючи той самий формат даних, що й модуль marshal. Існують функції для запису даних у формат серіалізації та додаткові функції, які можна використовувати для зворотного читання даних. Файли, які використовуються для зберігання маршалованих даних, необхідно відкривати в двійковому режимі.

Числові значення зберігаються з молодшим байтом першим.

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)

Marshal a long integer, value, to file. This will only write the least-significant 32 bits of value; regardless of the size of the native long type. version indicates the file format.

This function can fail, in which case it sets the error indicator. Use PyErr_Occurred() to check for that.

Примітка

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, значення, до файлу. версія вказує на формат файлу.

This function can fail, in which case it sets the error indicator. Use PyErr_Occurred() to check for that.

Примітка

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)
Return value: New reference.

Повертає об’єкт bytes, що містить упорядковане представлення value. версія вказує на формат файлу.

Наступні функції дозволяють зчитувати упорядковані значення.

long PyMarshal_ReadLongFromFile(FILE *file)

Return a C long from the data stream in a FILE* opened for reading. Only a 32-bit value can be read in using this function, regardless of the native size of long.

У разі помилки встановлює відповідний виняток (EOFError) і повертає -1.

int PyMarshal_ReadShortFromFile(FILE *file)

Return a C short from the data stream in a FILE* opened for reading. Only a 16-bit value can be read in using this function, regardless of the native size of short.

У разі помилки встановлює відповідний виняток (EOFError) і повертає -1.

PyObject *PyMarshal_ReadObjectFromFile(FILE *file)
Return value: New reference.

Return a Python object from the data stream in a FILE* opened for reading.

У разі помилки встановлює відповідний виняток (EOFError, ValueError або TypeError) і повертає NULL.

PyObject *PyMarshal_ReadLastObjectFromFile(FILE *file)
Return value: New reference.

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)
Return value: New reference.

Повертає об’єкт Python із потоку даних у байтовий буфер, що містить len байти, на які вказує data.

У разі помилки встановлює відповідний виняток (EOFError, ValueError або TypeError) і повертає NULL.