NAME
munlock() — unlock a segment of the process virtual address space
SYNOPSIS
#include <sys/mman.h>
int munlock( const void * addr, size_t len) ;
DESCRIPTION
The
munlock()
system call allows the calling process to unlock
a segment of the process virtual address space that may have
been previously locked with
mlock()
or
mlockall().
Upon successful completion of the
munlock(),
pages within the specified segment are subject to routine
paging and/or swapping.
addr
must be a valid address in the process virtual address space.
addr + len
must also be a valid address in the process virtual address space.
Pages are unlocked at page boundaries that encompass the
range from
addr
to
addr + len.
If any address within the range is not a valid part of
the process virtual address space, an error
is returned and no unlocks are performed.
However, no error is reported for valid pages within the range
that are not already locked, since their state at the completion
of the
munlock()
call is as desired.
Regardless of how many times a process locks a page, a single
munlock()
or
munlockall()
will unlock it.
An
munlock()
of a page within a range specified in an
mlock()
call results in only the range specified in the
munlock()
being unlocked.
When memory is shared by multiple processes and
mlocks are applied to the same physical page by multiple
processes, a page remains locked
until the last lock is removed from that page.
The effective user ID of the calling process
must be a superuser or the user must be a member of a group
that has the MLOCK privilege (see
getprivgrp(2)
and
setprivgrp(1M)).
Although
plock()
and the
mlock()
family of functions may be used together in an application,
each may affect the other in unexpected ways.
This practice is not recommended.
RETURN VALUE
munlock()
returns the following values:
- 0
Successful completion.
- -1
Failure.
The requested operation is not performed.
errno
is set to indicate the error.
ERRORS
If
munlock()
fails,
errno
is set to one of the following values:
- [ENOMEM]
One or more addresses in the specified range is not valid within
the process address space.
- [EINVAL]
The
len
parameter was zero.
- [EPERM]
The effective user ID of the calling process
is not a superuser
and the user does not belong to a group that has the
MLOCK
privilege.
EXAMPLES
The following call to
munlock()
unlocks the first 10 pages of the calling process address space:
STANDARDS CONFORMANCE
munlock(): POSIX Realtime Extensions, IEEE Std 1003.1b