swapctl(2)


swapctl -- manage swap space

Synopsis

   #include <sys/stat.h>
   #include <sys/swap.h>
   

int swapctl(int cmd, void *arg);

Description

swapctl 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 */

sr_start and sr_length are specified in 512-byte blocks.

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 */

SC_LIST 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_LIST, SC_ADD, and SC_REMOVE functions will fail if the calling process does not have appropriate privilege (P_SYSOPS).

Return values

On success, swapctl returns 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. On failure, swapctl returns -1 and sets errno to identify the error.

Note that unlink(2) does not always lead to file removal. mmap(2) can be used to create references to the file, and unlink only removes the file when link count goes to zero and all references to the file are gone.

Errors

In the following conditions, 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
arg, sr_name, or ste_path points outside the allocated address space.

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 process does not have appropriate privilege (P_SYSOPS).

EROFS
The pathname specified for SC_ADD is a read-only file system.

References

mmap(2), unlink(2)
© 2004 The SCO Group, Inc. All rights reserved.
UnixWare 7 Release 7.1.4 - 25 April 2004