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