xref: /third_party/python/Doc/c-api/marshal.rst (revision 7db96d56)
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