NAME
plock() — lock process, text, data, stack, or shared library in memory
SYNOPSIS
#include <sys/lock.h>
int plock(int op);
DESCRIPTION
The
plock()
system call allows the calling process to lock
the text segment of the process (text lock),
its data segment (data lock),
or both its text and data segment (process lock) into memory.
Stack segments are also locked when data segments are locked.
Shared library text and shared library data segments (shlib lock)
can also be locked.
Locked segments are immune to all routine swapping.
plock()
also allows these segments to be unlocked.
The effective user ID of the calling process
must be a user with the
MLOCK
privilege.
op
must be one of the following:
- PROCLOCK
Lock text and data segments into memory (process lock)
- TXTLOCK
Lock text segment into memory (text lock)
- DATLOCK
Lock data segment into memory (data lock)
- UNLOCK
Remove locks
- SHLIBLOCK
Lock shared library text and shared library data segments (shared library lock)
- PROCSHLIBLOCK
Lock text, data and shared library text and shared library data segments
into memory (process and shared library lock)
- TXTSHLIBLOCK
Lock text, shared library text and shared library data segments into memory
(text and shared library lock)
- DATSHLIBLOCK
Lock data, shared library text and shared library data segments into memory
(data and shared library lock)
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.
Security Restrictions
Some or all of the actions associated with this system call require the
MLOCK
privilege.
Processes owned by the superuser have this privilege.
Processes owned by other users may have this privilege, depending on system
configuration.
See
privileges(5)
for more information about privileged access on systems that support
fine-grained privileges.
RETURN VALUE
plock()
returns the following values:
- 0
Successful completion.
- -1
Failure.
The requested operation is not performed.
errno
is set to indicate the error.
ERRORS
If
plock()
fails,
errno
is set to one of the following values.
- EINVAL
op
is equal to
PROCLOCK
and a process lock, a text lock, or a data lock
already exists on the calling process.
- EINVAL
op
is equal to
TXTLOCK
and a text lock or process lock already exists on the calling process.
- EINVAL
op
is equal to
DATLOCK
and a data lock, or process lock already exists on the calling process.
- EINVAL
op
is equal to
UNLOCK
and no type of lock exists on the calling process.
- EINVAL
op
is equal to
SHLIBLOCK
and there are no unlocked shared library segments in the calling process.
- EINVAL
op
is equal to
PROCSHLIBLOCK
and a process lock, a text lock, or a data lock
already exists on the calling process.
- EINVAL
op
is equal to
TXTSHLIBLOCK
and a text lock or process lock already exists on the calling process.
- EINVAL
op
is equal to
DATSHLIBLOCK
and a data lock, or process lock already exists on the calling process.
- EINVAL
op
is not equal to one of the values specified in
DESCRIPTION.
- EINVAL
plock()
is not allowed in a
[vfork,exec]
window.
See
vfork(2).
- ENOMEM
There is not enough lockable memory in the system
to satisfy the locking request.
- EPERM
The effective user ID of the calling process
is not a
user with the
MLOCK
privilege.
EXAMPLES
The following call to
plock()
locks the calling process in memory:
STANDARDS CONFORMANCE
plock(): SVID2, SVID3, XPG2