MINCORE(2)                (2017-09-15)                 MINCORE(2)

          mincore - determine whether pages are resident in memory

          #include <unistd.h>
          #include <sys/mman.h>

          int mincore(void *addr, size_t length, unsigned char *vec

     Feature Test Macro Requirements for glibc (see

              Since glibc 2.19:
              Glibc 2.19 and earlier:
                  _BSD_SOURCE || _SVID_SOURCE

          mincore() returns a vector that indicates whether pages of
          the calling process's virtual memory are resident in core
          (RAM), and so will not cause a disk access (page fault) if
          referenced.  The kernel returns residency information about
          the pages starting at the address addr, and continuing for
          length bytes.

          The addr argument must be a multiple of the system page
          size.  The length argument need not be a multiple of the
          page size, but since residency information is returned for
          whole pages, length is effectively rounded up to the next
          multiple of the page size.  One may obtain the page size
          (PAGE_SIZE) using sysconf(_SC_PAGESIZE).

          The vec argument must point to an array containing at least
          (length+PAGE_SIZE-1) / PAGE_SIZE bytes.  On return, the
          least significant bit of each byte will be set if the corre-
          sponding page is currently resident in memory, and be clear
          otherwise.  (The settings of the other bits in each byte are
          undefined; these bits are reserved for possible later use.)
          Of course the information returned in vec is only a snap-
          shot: pages that are not locked in memory can come and go at
          any moment, and the contents of vec may already be stale by
          the time this call returns.

          On success, mincore() returns zero.  On error, -1 is
          returned, and errno is set appropriately.

          EAGAIN kernel is temporarily out of resources.

     Page 1                        Linux             (printed 5/22/22)

     MINCORE(2)                (2017-09-15)                 MINCORE(2)

               vec points to an invalid address.

               addr is not a multiple of the page size.

               length is greater than (TASK_SIZE - addr).  (This could
               occur if a negative value is specified for length,
               since that value will be interpreted as a large
               unsigned integer.)  In Linux 2.6.11 and earlier, the
               error EINVAL was returned for this condition.

               addr to addr + length contained unmapped memory.

          Available since Linux 2.3.99pre1 and glibc 2.2.

          mincore() is not specified in POSIX.1, and it is not avail-
          able on all UNIX implementations.

          Before kernel 2.6.21, mincore() did not return correct
          information for MAP_PRIVATE mappings, or for nonlinear map-
          pings (established using remap_file_pages(2)).

          fincore(1), madvise(2), mlock(2), mmap(2), posix_fadvise(2),

          This page is part of release 5.10 of the Linux man-pages
          project.  A description of the project, information about
          reporting bugs, and the latest version of this page, can be
          found at https://www.kernel.org/doc/man-pages/.

     Page 2                        Linux             (printed 5/22/22)