svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
swapctl(2)
swapctl(2) System Calls swapctl(2)
NAME
swapctl - manage swap space
SYNOPSIS
#include <sys/stat.h>
#include <sys/swap.h>
int swapctl(int cmd, void *arg);
DESCRIPTION
The swapctl() function adds, deletes, or returns information about swap
resources. cmd specifies one of the following options contained in
<sys/swap.h>:
SC_ADD /* add a resource for swapping */
SC_LIST /* list the resources for swapping */
SC_REMOVE /* remove a resource for swapping */
SC_GETNSWP /* return number of swap resources */
When SC_ADD or SC_REMOVE are specified the SC_PERSIST flag can be added
with a bitwise-OR with the command
SC_PERSIST /* Make the change permanent over reboots */
When SC_ADD or SC_REMOVE is specified, arg is a pointer to a swapres
structure containing the following members:
char *sr_name; /* pathname of resource */
off_t sr_start; /* offset to start of swap area */
off_t sr_length; /* length of swap area */
The sr_start and sr_length members are specified in 512-byte blocks. A
swap resource can only be removed by specifying the same values for the
sr_start and sr_length members as were specified when it was added.
Swap resources need not be removed in the order in which they were
added.
When adding or removing ZFS volumes if SC_PERSIST is specified then up‐
date the kvol_swap property of the ZFS volume so the change persists
across reboots.
When SC_LIST is specified, arg is a pointer to a swaptable structure
containing the following members:
int swt_n; /* number of swapents following */
struct swapent swt_ent[]; /* array of swt_n swapents */
A swapent structure contains the following members:
char *ste_path; /* name of the swap file */
off_t ste_start; /* starting block for swapping */
off_t ste_length; /* length of swap area */
long ste_pages; /* number of pages for swapping */
long ste_free; /* number of ste_pages free */
long ste_flags; /* ST_INDEL bit set if swap file */
/* is now being deleted */
The SC_LIST function causes swapctl() to return at most swt_n entries.
The return value of swapctl() is the number actually returned. The
ST_INDEL bit is turned on in ste_flags if the swap file is in the
process of being deleted. The ST_ENCRYPTED bit is turned on if data
written to the swap device is reported being encrypted by the underly‐
ing device layer, eg zfs(8) or lofi(4d).
When SC_GETNSWP is specified, swapctl() returns as its value the number
of swap resources in use. arg is ignored for this operation.
The SC_ADD and SC_REMOVE functions will fail if calling process does
not have appropriate privileges.
The behaviour when SC_PERSIST is set and SC_ADD or SC_REMOVE is not set
is undefined.
The behaviour when SC_PERSIST and the swap device is not a ZFS volume
is undefined.
RETURN VALUES
Upon successful completion, the function swapctl() returns a value of 0
for SC_ADD or SC_REMOVE, the number of struct swapent entries actually
returned for SC_LIST, or the number of swap resources in use for
SC_GETNSWP. Upon failure, the function swapctl() returns a value of −1
and sets errno to indicate an error.
ERRORS
Under the following conditions, the function swapctl() fails and sets
errno to:
EEXIST Part of the range specified by sr_start and sr_length
is already being used for swapping on the specified re‐
source (SC_ADD).
EFAULT Either arg, sr_name, or ste_path points to an illegal
address.
EINVAL The specified function value is not valid, the path
specified is not a swap resource (SC_REMOVE), part of
the range specified by sr_start and sr_length lies out‐
side the resource specified (SC_ADD), or the specified
swap area is less than one page (SC_ADD).
EISDIR The path specified for SC_ADD is a directory.
ELOOP Too many symbolic links were encountered in translating
the pathname provided to SC_ADD or SC_REMOVE.
ENAMETOOLONG The length of a component of the path specified for
SC_ADD or SC_REMOVE exceeds NAME_MAX characters or the
length of the path exceeds PATH_MAX characters and
_POSIX_NO_TRUNC is in effect.
ENOENT The pathname specified for SC_ADD or SC_REMOVE does not
exist.
ENOMEM An insufficient number of struct swapent structures
were provided to SC_LIST, or there were insufficient
system storage resources available during an SC_ADD or
SC_REMOVE, or the system would not have enough swap
space after an SC_REMOVE.
ENOSYS The pathname specified for SC_ADD or SC_REMOVE is not a
file or block special device.
ENOTDIR Pathname provided to SC_ADD or SC_REMOVE contained a
component in the path prefix that was not a directory.
EPERM The {PRIV_SYS_MOUNT} was not asserted in the effective
set of the calling process.
EROFS The pathname specified for SC_ADD is a read-only file
system.
Additionally, the swapctl() function will fail for 32-bit interfaces
if:
EOVERFLOW The amount of swap space configured on the machine is too
large to be represented by a 32-bit quantity.
EXAMPLES
Example 1 The usage of the SC_GETNSWP and SC_LIST commands.
The following example demonstrates the usage of the SC_GETNSWP and
SC_LIST commands.
#include <sys/stat.h>
#include <sys/swap.h>
#include <stdio.h>
#include <limits.h>
#define MAXSTRSIZE PATH_MAX
int
main(int argc, char **argv)
{
swaptbl_t *s;
int n, num;
char *strtab; /* string table for path names */
again:
if ((num = swapctl(SC_GETNSWP, 0)) == -1) {
perror("swapctl: GETNSWP");
exit(1);
}
if (num == 0) {
fprintf(stderr, "No Swap Devices Configured\n");
exit(2);
}
/* allocate swaptable for num+1 entries */
if ((s = (swaptbl_t *)
malloc(num * sizeof(swapent_t) +
sizeof(struct swaptable))) ==
(void *) 0) {
fprintf(stderr, "Malloc Failed\n");
exit(3);
}
/* allocate num+1 string holders */
if ((strtab = (char *)
malloc((num + 1) * MAXSTRSIZE)) == (void *) 0) {
fprintf(stderr, "Malloc Failed\n");
exit(3);
}
/* initialize string pointers */
for (int i = 0; i < (num + 1); i++) {
s->swt_ent[i].ste_path = strtab + (i * MAXSTRSIZE);
}
s->swt_n = num + 1;
if ((n = swapctl(SC_LIST, s)) < 0) {
perror("swapctl");
exit(1);
}
if (n > num) { /* more were added */
free(s);
free(strtab);
goto again;
}
for (int i = 0; i < n; i++) {
printf("%s %ld%s\n",
s->swt_ent[i].ste_path, s->swt_ent[i].ste_pages,
s->swt_ent[i].ste_flags & ST_ENCRYPTED ? " Encrypted" : "");
}
exit(0);
}
SEE ALSO
lofi(4d), privileges(7), zfs(8)
Oracle Solaris 11.4 25 February 2023 swapctl(2)