sysctl


SYNOPSIS
       #include <unistd.h>
       #include <linux/sysctl.h>

       int _sysctl(struct __sysctl_args *args);

DESCRIPTION
       Do not use this system call!  See NOTES.

       The _sysctl() call reads and/or writes kernel parameters.  For example,
       the hostname, or the maximum number of open files.   The  argument  has
       the form

           struct __sysctl_args {
               int    *name;    /* integer vector describing variable */
               int     nlen;    /* length of this vector */
               void   *oldval;  /* 0 or address where to store old value */
               size_t *oldlenp; /* available room for old value,
                                   overwritten by actual size of old value */
               void   *newval;  /* 0 or address of new value */
               size_t  newlen;  /* size of new value */
           };

       This  call  does  a  search  in a tree structure, possibly resembling a
       directory tree under /proc/sys, and if  the  requested  item  is  found
       calls some appropriate routine to read or modify the value.

RETURN VALUE
       Upon successful completion, _sysctl() returns 0.  Otherwise, a value of
       -1 is returned and errno is set to indicate the error.

ERRORS
       EFAULT The invocation asked for the previous value  by  setting  oldval
              non-NULL, but allowed zero room in oldlenp.

       ENOTDIR
              name was not found.

       EPERM  No  search  permission for one of the encountered "directories",
              or no read permission where oldval was  non-zero,  or  no  write
              permission where newval was non-zero.

CONFORMING TO
       This  call  is  Linux-specific,  and  should  not  be  used in programs
       intended to be portable.  A sysctl() call has  been  present  in  Linux
       since  version  1.3.57.   It  originated in 4.4BSD.  Only Linux has the
       /proc/sys mirror, and the object naming schemes  differ  between  Linux
       and 4.4BSD, but the declaration of the sysctl() function is the same in
       both.

NOTES
       Glibc does not provide a wrapper for this system call;  call  it  using
       syscall(2).
       It  is  not  yet  possible  to  change  operating  system by writing to
       /proc/sys/kernel/ostype.

EXAMPLE
       #define _GNU_SOURCE
       #include <unistd.h>
       #include <sys/syscall.h>
       #include <string.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <linux/sysctl.h>

       int _sysctl(struct __sysctl_args *args );

       #define OSNAMESZ 100

       int
       main(void)
       {
           struct __sysctl_args args;
           char osname[OSNAMESZ];
           size_t osnamelth;
           int name[] = { CTL_KERN, KERN_OSTYPE };

           memset(&args, 0, sizeof(struct __sysctl_args));
           args.name = name;
           args.nlen = sizeof(name)/sizeof(name[0]);
           args.oldval = osname;
           args.oldlenp = &osnamelth;

           osnamelth = sizeof(osname);

           if (syscall(SYS__sysctl, &args) == -1) {
               perror("_sysctl");
               exit(EXIT_FAILURE);
           }
           printf("This machine is running %*s\n", osnamelth, osname);
           exit(EXIT_SUCCESS);
       }

SEE ALSO
       proc(5)

COLOPHON
       This page is part of release 3.23 of the Linux  man-pages  project.   A
       description  of  the project, and information about reporting bugs, can
       be found at http://www.kernel.org/doc/man-pages/.



Linux                             2008-11-20                         SYSCTL(2)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2012 Hurricane Electric. All Rights Reserved.