swapctl(2) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

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 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. 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.

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
                       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 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               24 Mar 2020                       swapctl(2)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3