17db96d56Sopenharmony_ci:mod:`mmap` --- Memory-mapped file support
27db96d56Sopenharmony_ci==========================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: mmap
57db96d56Sopenharmony_ci   :synopsis: Interface to memory-mapped files for Unix and Windows.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci--------------
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciMemory-mapped file objects behave like both :class:`bytearray` and like
127db96d56Sopenharmony_ci:term:`file objects <file object>`.  You can use mmap objects in most places
137db96d56Sopenharmony_ciwhere :class:`bytearray` are expected; for example, you can use the :mod:`re`
147db96d56Sopenharmony_cimodule to search through a memory-mapped file.  You can also change a single
157db96d56Sopenharmony_cibyte by doing ``obj[index] = 97``, or change a subsequence by assigning to a
167db96d56Sopenharmony_cislice: ``obj[i1:i2] = b'...'``.  You can also read and write data starting at
177db96d56Sopenharmony_cithe current file position, and :meth:`seek` through the file to different positions.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ciA memory-mapped file is created by the :class:`~mmap.mmap` constructor, which is
207db96d56Sopenharmony_cidifferent on Unix and on Windows.  In either case you must provide a file
217db96d56Sopenharmony_cidescriptor for a file opened for update. If you wish to map an existing Python
227db96d56Sopenharmony_cifile object, use its :meth:`fileno` method to obtain the correct value for the
237db96d56Sopenharmony_ci*fileno* parameter.  Otherwise, you can open the file using the
247db96d56Sopenharmony_ci:func:`os.open` function, which returns a file descriptor directly (the file
257db96d56Sopenharmony_cistill needs to be closed when done).
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. note::
287db96d56Sopenharmony_ci   If you want to create a memory-mapping for a writable, buffered file, you
297db96d56Sopenharmony_ci   should :func:`~io.IOBase.flush` the file first.  This is necessary to ensure
307db96d56Sopenharmony_ci   that local modifications to the buffers are actually available to the
317db96d56Sopenharmony_ci   mapping.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciFor both the Unix and Windows versions of the constructor, *access* may be
347db96d56Sopenharmony_cispecified as an optional keyword parameter. *access* accepts one of four
357db96d56Sopenharmony_civalues: :const:`ACCESS_READ`, :const:`ACCESS_WRITE`, or :const:`ACCESS_COPY` to
367db96d56Sopenharmony_cispecify read-only, write-through or copy-on-write memory respectively, or
377db96d56Sopenharmony_ci:const:`ACCESS_DEFAULT` to defer to *prot*.  *access* can be used on both Unix
387db96d56Sopenharmony_ciand Windows.  If *access* is not specified, Windows mmap returns a
397db96d56Sopenharmony_ciwrite-through mapping.  The initial memory values for all three access types
407db96d56Sopenharmony_ciare taken from the specified file.  Assignment to an :const:`ACCESS_READ`
417db96d56Sopenharmony_cimemory map raises a :exc:`TypeError` exception.  Assignment to an
427db96d56Sopenharmony_ci:const:`ACCESS_WRITE` memory map affects both memory and the underlying file.
437db96d56Sopenharmony_ciAssignment to an :const:`ACCESS_COPY` memory map affects memory but does not
447db96d56Sopenharmony_ciupdate the underlying file.
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci.. versionchanged:: 3.7
477db96d56Sopenharmony_ci   Added :const:`ACCESS_DEFAULT` constant.
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ciTo map anonymous memory, -1 should be passed as the fileno along with the length.
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci.. class:: mmap(fileno, length, tagname=None, access=ACCESS_DEFAULT[, offset])
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci   **(Windows version)** Maps *length* bytes from the file specified by the
547db96d56Sopenharmony_ci   file handle *fileno*, and creates a mmap object.  If *length* is larger
557db96d56Sopenharmony_ci   than the current size of the file, the file is extended to contain *length*
567db96d56Sopenharmony_ci   bytes.  If *length* is ``0``, the maximum length of the map is the current
577db96d56Sopenharmony_ci   size of the file, except that if the file is empty Windows raises an
587db96d56Sopenharmony_ci   exception (you cannot create an empty mapping on Windows).
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   *tagname*, if specified and not ``None``, is a string giving a tag name for
617db96d56Sopenharmony_ci   the mapping.  Windows allows you to have many different mappings against
627db96d56Sopenharmony_ci   the same file.  If you specify the name of an existing tag, that tag is
637db96d56Sopenharmony_ci   opened, otherwise a new tag of this name is created.  If this parameter is
647db96d56Sopenharmony_ci   omitted or ``None``, the mapping is created without a name.  Avoiding the
657db96d56Sopenharmony_ci   use of the tag parameter will assist in keeping your code portable between
667db96d56Sopenharmony_ci   Unix and Windows.
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci   *offset* may be specified as a non-negative integer offset. mmap references
697db96d56Sopenharmony_ci   will be relative to the offset from the beginning of the file. *offset*
707db96d56Sopenharmony_ci   defaults to 0.  *offset* must be a multiple of the :const:`ALLOCATIONGRANULARITY`.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci   .. audit-event:: mmap.__new__ fileno,length,access,offset mmap.mmap
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci.. class:: mmap(fileno, length, flags=MAP_SHARED, prot=PROT_WRITE|PROT_READ, access=ACCESS_DEFAULT[, offset])
757db96d56Sopenharmony_ci   :noindex:
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci   **(Unix version)** Maps *length* bytes from the file specified by the file
787db96d56Sopenharmony_ci   descriptor *fileno*, and returns a mmap object.  If *length* is ``0``, the
797db96d56Sopenharmony_ci   maximum length of the map will be the current size of the file when
807db96d56Sopenharmony_ci   :class:`~mmap.mmap` is called.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci   *flags* specifies the nature of the mapping. :const:`MAP_PRIVATE` creates a
837db96d56Sopenharmony_ci   private copy-on-write mapping, so changes to the contents of the mmap
847db96d56Sopenharmony_ci   object will be private to this process, and :const:`MAP_SHARED` creates a
857db96d56Sopenharmony_ci   mapping that's shared with all other processes mapping the same areas of
867db96d56Sopenharmony_ci   the file.  The default value is :const:`MAP_SHARED`. Some systems have
877db96d56Sopenharmony_ci   additional possible flags with the full list specified in
887db96d56Sopenharmony_ci   :ref:`MAP_* constants <map-constants>`.
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci   *prot*, if specified, gives the desired memory protection; the two most
917db96d56Sopenharmony_ci   useful values are :const:`PROT_READ` and :const:`PROT_WRITE`, to specify
927db96d56Sopenharmony_ci   that the pages may be read or written.  *prot* defaults to
937db96d56Sopenharmony_ci   :const:`PROT_READ \| PROT_WRITE`.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   *access* may be specified in lieu of *flags* and *prot* as an optional
967db96d56Sopenharmony_ci   keyword parameter.  It is an error to specify both *flags*, *prot* and
977db96d56Sopenharmony_ci   *access*.  See the description of *access* above for information on how to
987db96d56Sopenharmony_ci   use this parameter.
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   *offset* may be specified as a non-negative integer offset. mmap references
1017db96d56Sopenharmony_ci   will be relative to the offset from the beginning of the file. *offset*
1027db96d56Sopenharmony_ci   defaults to 0. *offset* must be a multiple of :const:`ALLOCATIONGRANULARITY`
1037db96d56Sopenharmony_ci   which is equal to :const:`PAGESIZE` on Unix systems.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci   To ensure validity of the created memory mapping the file specified
1067db96d56Sopenharmony_ci   by the descriptor *fileno* is internally automatically synchronized
1077db96d56Sopenharmony_ci   with the physical backing store on macOS.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   This example shows a simple way of using :class:`~mmap.mmap`::
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci      import mmap
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci      # write a simple example file
1147db96d56Sopenharmony_ci      with open("hello.txt", "wb") as f:
1157db96d56Sopenharmony_ci          f.write(b"Hello Python!\n")
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci      with open("hello.txt", "r+b") as f:
1187db96d56Sopenharmony_ci          # memory-map the file, size 0 means whole file
1197db96d56Sopenharmony_ci          mm = mmap.mmap(f.fileno(), 0)
1207db96d56Sopenharmony_ci          # read content via standard file methods
1217db96d56Sopenharmony_ci          print(mm.readline())  # prints b"Hello Python!\n"
1227db96d56Sopenharmony_ci          # read content via slice notation
1237db96d56Sopenharmony_ci          print(mm[:5])  # prints b"Hello"
1247db96d56Sopenharmony_ci          # update content using slice notation;
1257db96d56Sopenharmony_ci          # note that new content must have same size
1267db96d56Sopenharmony_ci          mm[6:] = b" world!\n"
1277db96d56Sopenharmony_ci          # ... and read again using standard file methods
1287db96d56Sopenharmony_ci          mm.seek(0)
1297db96d56Sopenharmony_ci          print(mm.readline())  # prints b"Hello  world!\n"
1307db96d56Sopenharmony_ci          # close the map
1317db96d56Sopenharmony_ci          mm.close()
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci   :class:`~mmap.mmap` can also be used as a context manager in a :keyword:`with`
1357db96d56Sopenharmony_ci   statement::
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci      import mmap
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci      with mmap.mmap(-1, 13) as mm:
1407db96d56Sopenharmony_ci          mm.write(b"Hello world!")
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   .. versionadded:: 3.2
1437db96d56Sopenharmony_ci      Context manager support.
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci   The next example demonstrates how to create an anonymous map and exchange
1477db96d56Sopenharmony_ci   data between the parent and child processes::
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci      import mmap
1507db96d56Sopenharmony_ci      import os
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci      mm = mmap.mmap(-1, 13)
1537db96d56Sopenharmony_ci      mm.write(b"Hello world!")
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci      pid = os.fork()
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci      if pid == 0:  # In a child process
1587db96d56Sopenharmony_ci          mm.seek(0)
1597db96d56Sopenharmony_ci          print(mm.readline())
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci          mm.close()
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci   .. audit-event:: mmap.__new__ fileno,length,access,offset mmap.mmap
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci   Memory-mapped file objects support the following methods:
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci   .. method:: close()
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci      Closes the mmap. Subsequent calls to other methods of the object will
1707db96d56Sopenharmony_ci      result in a ValueError exception being raised. This will not close
1717db96d56Sopenharmony_ci      the open file.
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci   .. attribute:: closed
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci      ``True`` if the file is closed.
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci      .. versionadded:: 3.2
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   .. method:: find(sub[, start[, end]])
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci      Returns the lowest index in the object where the subsequence *sub* is
1847db96d56Sopenharmony_ci      found, such that *sub* is contained in the range [*start*, *end*].
1857db96d56Sopenharmony_ci      Optional arguments *start* and *end* are interpreted as in slice notation.
1867db96d56Sopenharmony_ci      Returns ``-1`` on failure.
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci      .. versionchanged:: 3.5
1897db96d56Sopenharmony_ci         Writable :term:`bytes-like object` is now accepted.
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci   .. method:: flush([offset[, size]])
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci      Flushes changes made to the in-memory copy of a file back to disk. Without
1957db96d56Sopenharmony_ci      use of this call there is no guarantee that changes are written back before
1967db96d56Sopenharmony_ci      the object is destroyed.  If *offset* and *size* are specified, only
1977db96d56Sopenharmony_ci      changes to the given range of bytes will be flushed to disk; otherwise, the
1987db96d56Sopenharmony_ci      whole extent of the mapping is flushed.  *offset* must be a multiple of the
1997db96d56Sopenharmony_ci      :const:`PAGESIZE` or :const:`ALLOCATIONGRANULARITY`.
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci      ``None`` is returned to indicate success.  An exception is raised when the
2027db96d56Sopenharmony_ci      call failed.
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci      .. versionchanged:: 3.8
2057db96d56Sopenharmony_ci         Previously, a nonzero value was returned on success; zero was returned
2067db96d56Sopenharmony_ci         on error under Windows.  A zero value was returned on success; an
2077db96d56Sopenharmony_ci         exception was raised on error under Unix.
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci   .. method:: madvise(option[, start[, length]])
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ci      Send advice *option* to the kernel about the memory region beginning at
2137db96d56Sopenharmony_ci      *start* and extending *length* bytes.  *option* must be one of the
2147db96d56Sopenharmony_ci      :ref:`MADV_* constants <madvise-constants>` available on the system.  If
2157db96d56Sopenharmony_ci      *start* and *length* are omitted, the entire mapping is spanned.  On
2167db96d56Sopenharmony_ci      some systems (including Linux), *start* must be a multiple of the
2177db96d56Sopenharmony_ci      :const:`PAGESIZE`.
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci      Availability: Systems with the ``madvise()`` system call.
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci      .. versionadded:: 3.8
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci   .. method:: move(dest, src, count)
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci      Copy the *count* bytes starting at offset *src* to the destination index
2277db96d56Sopenharmony_ci      *dest*.  If the mmap was created with :const:`ACCESS_READ`, then calls to
2287db96d56Sopenharmony_ci      move will raise a :exc:`TypeError` exception.
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci   .. method:: read([n])
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci      Return a :class:`bytes` containing up to *n* bytes starting from the
2347db96d56Sopenharmony_ci      current file position. If the argument is omitted, ``None`` or negative,
2357db96d56Sopenharmony_ci      return all bytes from the current file position to the end of the
2367db96d56Sopenharmony_ci      mapping. The file position is updated to point after the bytes that were
2377db96d56Sopenharmony_ci      returned.
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci      .. versionchanged:: 3.3
2407db96d56Sopenharmony_ci         Argument can be omitted or ``None``.
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   .. method:: read_byte()
2437db96d56Sopenharmony_ci
2447db96d56Sopenharmony_ci      Returns a byte at the current file position as an integer, and advances
2457db96d56Sopenharmony_ci      the file position by 1.
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   .. method:: readline()
2497db96d56Sopenharmony_ci
2507db96d56Sopenharmony_ci      Returns a single line, starting at the current file position and up to the
2517db96d56Sopenharmony_ci      next newline. The file position is updated to point after the bytes that were
2527db96d56Sopenharmony_ci      returned.
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci   .. method:: resize(newsize)
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci      Resizes the map and the underlying file, if any. If the mmap was created
2587db96d56Sopenharmony_ci      with :const:`ACCESS_READ` or :const:`ACCESS_COPY`, resizing the map will
2597db96d56Sopenharmony_ci      raise a :exc:`TypeError` exception.
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci      **On Windows**: Resizing the map will raise an :exc:`OSError` if there are other
2627db96d56Sopenharmony_ci      maps against the same named file. Resizing an anonymous map (ie against the
2637db96d56Sopenharmony_ci      pagefile) will silently create a new map with the original data copied over
2647db96d56Sopenharmony_ci      up to the length of the new size.
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci      .. versionchanged:: 3.11
2677db96d56Sopenharmony_ci         Correctly fails if attempting to resize when another map is held
2687db96d56Sopenharmony_ci         Allows resize against an anonymous map on Windows
2697db96d56Sopenharmony_ci
2707db96d56Sopenharmony_ci   .. method:: rfind(sub[, start[, end]])
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci      Returns the highest index in the object where the subsequence *sub* is
2737db96d56Sopenharmony_ci      found, such that *sub* is contained in the range [*start*, *end*].
2747db96d56Sopenharmony_ci      Optional arguments *start* and *end* are interpreted as in slice notation.
2757db96d56Sopenharmony_ci      Returns ``-1`` on failure.
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci      .. versionchanged:: 3.5
2787db96d56Sopenharmony_ci         Writable :term:`bytes-like object` is now accepted.
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci   .. method:: seek(pos[, whence])
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ci      Set the file's current position.  *whence* argument is optional and
2847db96d56Sopenharmony_ci      defaults to ``os.SEEK_SET`` or ``0`` (absolute file positioning); other
2857db96d56Sopenharmony_ci      values are ``os.SEEK_CUR`` or ``1`` (seek relative to the current
2867db96d56Sopenharmony_ci      position) and ``os.SEEK_END`` or ``2`` (seek relative to the file's end).
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci   .. method:: size()
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci      Return the length of the file, which can be larger than the size of the
2927db96d56Sopenharmony_ci      memory-mapped area.
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci   .. method:: tell()
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci      Returns the current position of the file pointer.
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci   .. method:: write(bytes)
3017db96d56Sopenharmony_ci
3027db96d56Sopenharmony_ci      Write the bytes in *bytes* into memory at the current position of the
3037db96d56Sopenharmony_ci      file pointer and return the number of bytes written (never less than
3047db96d56Sopenharmony_ci      ``len(bytes)``, since if the write fails, a :exc:`ValueError` will be
3057db96d56Sopenharmony_ci      raised).  The file position is updated to point after the bytes that
3067db96d56Sopenharmony_ci      were written.  If the mmap was created with :const:`ACCESS_READ`, then
3077db96d56Sopenharmony_ci      writing to it will raise a :exc:`TypeError` exception.
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci      .. versionchanged:: 3.5
3107db96d56Sopenharmony_ci         Writable :term:`bytes-like object` is now accepted.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci      .. versionchanged:: 3.6
3137db96d56Sopenharmony_ci         The number of bytes written is now returned.
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci
3167db96d56Sopenharmony_ci   .. method:: write_byte(byte)
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci      Write the integer *byte* into memory at the current
3197db96d56Sopenharmony_ci      position of the file pointer; the file position is advanced by ``1``. If
3207db96d56Sopenharmony_ci      the mmap was created with :const:`ACCESS_READ`, then writing to it will
3217db96d56Sopenharmony_ci      raise a :exc:`TypeError` exception.
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci.. _madvise-constants:
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ciMADV_* Constants
3267db96d56Sopenharmony_ci++++++++++++++++
3277db96d56Sopenharmony_ci
3287db96d56Sopenharmony_ci.. data:: MADV_NORMAL
3297db96d56Sopenharmony_ci          MADV_RANDOM
3307db96d56Sopenharmony_ci          MADV_SEQUENTIAL
3317db96d56Sopenharmony_ci          MADV_WILLNEED
3327db96d56Sopenharmony_ci          MADV_DONTNEED
3337db96d56Sopenharmony_ci          MADV_REMOVE
3347db96d56Sopenharmony_ci          MADV_DONTFORK
3357db96d56Sopenharmony_ci          MADV_DOFORK
3367db96d56Sopenharmony_ci          MADV_HWPOISON
3377db96d56Sopenharmony_ci          MADV_MERGEABLE
3387db96d56Sopenharmony_ci          MADV_UNMERGEABLE
3397db96d56Sopenharmony_ci          MADV_SOFT_OFFLINE
3407db96d56Sopenharmony_ci          MADV_HUGEPAGE
3417db96d56Sopenharmony_ci          MADV_NOHUGEPAGE
3427db96d56Sopenharmony_ci          MADV_DONTDUMP
3437db96d56Sopenharmony_ci          MADV_DODUMP
3447db96d56Sopenharmony_ci          MADV_FREE
3457db96d56Sopenharmony_ci          MADV_NOSYNC
3467db96d56Sopenharmony_ci          MADV_AUTOSYNC
3477db96d56Sopenharmony_ci          MADV_NOCORE
3487db96d56Sopenharmony_ci          MADV_CORE
3497db96d56Sopenharmony_ci          MADV_PROTECT
3507db96d56Sopenharmony_ci          MADV_FREE_REUSABLE
3517db96d56Sopenharmony_ci          MADV_FREE_REUSE
3527db96d56Sopenharmony_ci
3537db96d56Sopenharmony_ci   These options can be passed to :meth:`mmap.madvise`.  Not every option will
3547db96d56Sopenharmony_ci   be present on every system.
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   Availability: Systems with the madvise() system call.
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci   .. versionadded:: 3.8
3597db96d56Sopenharmony_ci
3607db96d56Sopenharmony_ci.. _map-constants:
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ciMAP_* Constants
3637db96d56Sopenharmony_ci+++++++++++++++
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci.. data:: MAP_SHARED
3667db96d56Sopenharmony_ci          MAP_PRIVATE
3677db96d56Sopenharmony_ci          MAP_DENYWRITE
3687db96d56Sopenharmony_ci          MAP_EXECUTABLE
3697db96d56Sopenharmony_ci          MAP_ANON
3707db96d56Sopenharmony_ci          MAP_ANONYMOUS
3717db96d56Sopenharmony_ci          MAP_POPULATE
3727db96d56Sopenharmony_ci          MAP_STACK
3737db96d56Sopenharmony_ci
3747db96d56Sopenharmony_ci    These are the various flags that can be passed to :meth:`mmap.mmap`. Note that some options might not be present on some systems.
3757db96d56Sopenharmony_ci
3767db96d56Sopenharmony_ci    .. versionchanged:: 3.10
3777db96d56Sopenharmony_ci       Added MAP_POPULATE constant.
3787db96d56Sopenharmony_ci
3797db96d56Sopenharmony_ci    .. versionadded:: 3.11
3807db96d56Sopenharmony_ci       Added MAP_STACK constant.
381