unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.10)
Page:
Section:
Apropos / Subsearch:
optional field

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
       <&lt;sys/swap.h>&gt;:

       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 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  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  char-
                               acters  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 struc-
                               tures  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  con-
                               tained  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\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 (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\n",
                   s->swt_ent[i].ste_path, s->swt_ent[i].ste_pages);
       }


SEE ALSO
       privileges(5)



SunOS 5.10                        25 Sep 1997                       swapctl(2)