mlock()

Lock a range of process address space in physical memory

Synopsis:

#include <sys/mman.h>

int mlock(const void * addr, 
          size_t len);

Arguments:

addr
The starting address for the range of process address space.
len
The amount of the memory to lock, in bytes. There's no limit on the amount of memory that a process may lock, other than the amount of physical memory in the system.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The mlock() function locks a range of process address space starting at address addr and continuing for length len. The addr must be a multiple of PAGESIZE, which depends on the target platform.

Note: The full POSIX implementation for this function was added in the QNX Neutrino Core OS 6.3.2.

In order to lock memory, your process must have the PROCMGR_AID_MEM_LOCK ability enabled. For more information, see procmgr_ability().

The successful call to mlock() function ensures that the pages are memory-resident (i.e. the addresses always reside in physical memory). For more information, see "Locking memory" in the Process Manager chapter of the System Architecture guide.

Returns:

0
Success.
-1
An error occurred (errno is set).

Errors:

ENOMEM
  • Some or all of the address range specified by the addr and len arguments doesn't correspond to valid mapped pages in the address space of the process.
  • Locking the pages mapped by the specified range would exceed an implementation-defined limit on the amount of memory that the process may lock. This implementation-defined limit is set by RLIMIT_MEMLOCK rlimit.
EAGAIN
Some or all of the memory identified by the operation couldn't be locked when the call was made.
EPERM
The calling process doesn't have the required permission; see procmgr_ability().

Classification:

POSIX 1003.1 MLR

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes