Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

swapctl(2) [posix man page]

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 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 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. 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. 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 actu- ally 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 resource (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 outside 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> #define MAXSTRSIZE 80 main(argc, argv) int argc; char *argv[]; { swaptbl_t *s; int i, 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 "); 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 "); exit(3); } /* allocate num+1 string holders */ if ((strtab = (char *) malloc((num + 1) * MAXSTRSIZE)) == (void *) 0) { fprintf(stderr, "Malloc Failed "); exit(3); } /* initialize string pointers */ for (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 (i = 0; i < n; i++) printf("%s %ld ", s->swt_ent[i].ste_path, s->swt_ent[i].ste_pages); } SEE ALSO
privileges(5) SunOS 5.10 25 Sep 1997 swapctl(2)
Man Page