17db96d56Sopenharmony_ci.. highlight:: c 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci.. _marshalling-utils: 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciData marshalling support 67db96d56Sopenharmony_ci======================== 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ciThese routines allow C code to work with serialized objects using the same 97db96d56Sopenharmony_cidata format as the :mod:`marshal` module. There are functions to write data 107db96d56Sopenharmony_ciinto the serialization format, and additional functions that can be used to 117db96d56Sopenharmony_ciread the data back. Files used to store marshalled data must be opened in 127db96d56Sopenharmony_cibinary mode. 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciNumeric values are stored with the least significant byte first. 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciThe module supports two versions of the data format: version 0 is the 177db96d56Sopenharmony_cihistorical version, version 1 shares interned strings in the file, and upon 187db96d56Sopenharmony_ciunmarshalling. Version 2 uses a binary format for floating point numbers. 197db96d56Sopenharmony_ci``Py_MARSHAL_VERSION`` indicates the current file format (currently 2). 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci 227db96d56Sopenharmony_ci.. c:function:: void PyMarshal_WriteLongToFile(long value, FILE *file, int version) 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci Marshal a :c:expr:`long` integer, *value*, to *file*. This will only write 257db96d56Sopenharmony_ci the least-significant 32 bits of *value*; regardless of the size of the 267db96d56Sopenharmony_ci native :c:expr:`long` type. *version* indicates the file format. 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci This function can fail, in which case it sets the error indicator. 297db96d56Sopenharmony_ci Use :c:func:`PyErr_Occurred` to check for that. 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci.. c:function:: void PyMarshal_WriteObjectToFile(PyObject *value, FILE *file, int version) 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci Marshal a Python object, *value*, to *file*. 347db96d56Sopenharmony_ci *version* indicates the file format. 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci This function can fail, in which case it sets the error indicator. 377db96d56Sopenharmony_ci Use :c:func:`PyErr_Occurred` to check for that. 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci.. c:function:: PyObject* PyMarshal_WriteObjectToString(PyObject *value, int version) 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci Return a bytes object containing the marshalled representation of *value*. 427db96d56Sopenharmony_ci *version* indicates the file format. 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ciThe following functions allow marshalled values to be read back in. 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci.. c:function:: long PyMarshal_ReadLongFromFile(FILE *file) 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci Return a C :c:expr:`long` from the data stream in a :c:expr:`FILE*` opened 517db96d56Sopenharmony_ci for reading. Only a 32-bit value can be read in using this function, 527db96d56Sopenharmony_ci regardless of the native size of :c:expr:`long`. 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci On error, sets the appropriate exception (:exc:`EOFError`) and returns 557db96d56Sopenharmony_ci ``-1``. 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci.. c:function:: int PyMarshal_ReadShortFromFile(FILE *file) 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci Return a C :c:expr:`short` from the data stream in a :c:expr:`FILE*` opened 617db96d56Sopenharmony_ci for reading. Only a 16-bit value can be read in using this function, 627db96d56Sopenharmony_ci regardless of the native size of :c:expr:`short`. 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci On error, sets the appropriate exception (:exc:`EOFError`) and returns 657db96d56Sopenharmony_ci ``-1``. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci 687db96d56Sopenharmony_ci.. c:function:: PyObject* PyMarshal_ReadObjectFromFile(FILE *file) 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci Return a Python object from the data stream in a :c:expr:`FILE*` opened for 717db96d56Sopenharmony_ci reading. 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci On error, sets the appropriate exception (:exc:`EOFError`, :exc:`ValueError` 747db96d56Sopenharmony_ci or :exc:`TypeError`) and returns ``NULL``. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci.. c:function:: PyObject* PyMarshal_ReadLastObjectFromFile(FILE *file) 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci Return a Python object from the data stream in a :c:expr:`FILE*` opened for 807db96d56Sopenharmony_ci reading. Unlike :c:func:`PyMarshal_ReadObjectFromFile`, this function 817db96d56Sopenharmony_ci assumes that no further objects will be read from the file, allowing it to 827db96d56Sopenharmony_ci aggressively load file data into memory so that the de-serialization can 837db96d56Sopenharmony_ci operate from data in memory rather than reading a byte at a time from the 847db96d56Sopenharmony_ci file. Only use these variant if you are certain that you won't be reading 857db96d56Sopenharmony_ci anything else from the file. 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci On error, sets the appropriate exception (:exc:`EOFError`, :exc:`ValueError` 887db96d56Sopenharmony_ci or :exc:`TypeError`) and returns ``NULL``. 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci.. c:function:: PyObject* PyMarshal_ReadObjectFromString(const char *data, Py_ssize_t len) 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci Return a Python object from the data stream in a byte buffer 947db96d56Sopenharmony_ci containing *len* bytes pointed to by *data*. 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci On error, sets the appropriate exception (:exc:`EOFError`, :exc:`ValueError` 977db96d56Sopenharmony_ci or :exc:`TypeError`) and returns ``NULL``. 987db96d56Sopenharmony_ci 99