Lock all of a process's address space
Synopsis:
#include <sys/mman.h>
int mlockall(int flags);
Arguments:
- flags
- Flags that indicate which pages to lock; one or more of the following bits:
- MCL_CURRENT
- Lock the pages currently mapped into the address space of the process.
- MCL_FUTURE
- Lock the pages that become mapped into the address
space of the process in the future, when the mappings are established.
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
The mlockall() function causes all of the pages mapped by the
address space of a process to be locked and made memory-resident until
unlocked, or the process exits or executes another process.
The pages that are locked depend on the flags argument.
The exception is any page with a PROT_NONE access setting;
mlockall() skips those pages because there is no need to lock a page that can't be accessed.
Note:
The full POSIX implementation for this function was added in the QNX Neutrino Core OS 6.3.2.
Memory-resident is a term used to indicate that the addresses always reside in physical memory.
For more information, see
Locking memory
in the Process Manager chapter of the System Architecture guide.
In order to lock pages, your process must have the
PROCMGR_AID_MEM_LOCK ability enabled.
For more information, see
procmgr_ability().
Follow either of the following approaches when attempting to lock pages:
- Tightly controlled approach
- Lock the pages one by one, by calling mmap() and then mlock().
- Global approach
- Lock all pages at the same time, by doing one of the following:
- Call mlockall(MCL_FUTURE), followed by one or more calls
to mmap().
- Optionally call mmap(), and then call mlockall(MCL_CURRENT).
Returns:
- 0
- Success.
- -1
- An error occurred (errno is set).
Errors:
- EAGAIN
- Some or all of the memory identified by the operation couldn't be locked when the call was made.
- EINVAL
- The flags argument is zero.
- ENOMEM
- Locking all of the pages currently mapped into the address
space of the process would exceed the limit on the
amount of memory that the process may lock.
- EPERM
- The calling process doesn't have the required permission; see
procmgr_ability().
Classification:
POSIX 1003.1 ML
Safety: |
|
Cancellation point |
No |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |