sysctl

sysctl(2)                      2007-10-27-16:31                      sysctl(2)



ÐÐÐÐÐ
       sysctl - ÑиÑаÑ/запиÑÑÑ Ð¿Ð°ÑамеÑÑи ÑиÑÑеми


СÐÐТÐÐСÐС
       #Ñnclude <unÑstd.h>

       #Ñnclude <lÑnux/unÑstd.h>

       #Ñnclude <lÑnux/sysctl.h>

       _syscall1(Ñnt, _sysctl, struct __sysctl_args *, args);

       Ñnt _sysctl(struct __sysctl_args *args);


ÐÐÐС
       СиÑÑемний  виклик  _sysctl  зÑиÑÑÑ  Ñ/або змÑнÑÑ
       паÑамеÑÑи ÑдÑа. Це може бÑÑи, напÑиклад, Ñм'Ñ
       маÑини або макÑималÑна кÑлÑкÑÑÑÑ  вÑдкÑиÑиÑ
       ÑайлÑв. ÐÑгÑÐ¼ÐµÐ½Ñ ÑÑнкÑÑÑ Ð¼Ð°Ñ Ð½Ð°ÑÑÑÐ¿Ð½Ñ ÑоÑмÑ:

               struct __sysctl_args {
                   Ñnt *name; /* векÑоÑ, ÑÑле ÑиÑло, опиÑÑÑ Ð·Ð¼ÑÐ½Ð½Ñ */
                   Ñnt nlen;  /* довжина ÑÑого векÑоÑа */
                   voÑd *oldval; /* 0 або адÑеÑа, Ñка збеÑеже ÑÑаÑе знаÑÐµÐ½Ð½Ñ */
                   sÑze_t *oldlenp; /* ÑозмÑÑ Ð¿ÑоÑÑоÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÑÑаÑого
                                     * знаÑÐµÐ½Ð½Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ */
                   voÑd *newval;    /* 0 або адÑеÑа нового знаÑÐµÐ½Ð½Ñ */
                   sÑze_t newlen;   /* ÑозмÑÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾ знаÑÐµÐ½Ð½Ñ */
               };

       Цей  виклик  ÑобиÑÑ  поÑÑк  Ñ  деÑевоподÑбнÑй
       ÑÑÑÑкÑÑÑÑ, можливо  деÑо  подÑбнÑй  на  /proc/sys,
       Ñ, ÑкÑо необÑÑдний ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾,
       виклиÑе вÑдповÑÐ´Ð½Ñ ÑÑнкÑÑÑ, Ñо ÑиÑÐ°Ñ Ð°Ð±Ð¾ змÑнÑÑ
       дане знаÑеннÑ.


ÐÐ ÐÐÐÐÐ
               #include <linux/unistd.h>
               #include <linux/types.h>
               #include <linux/sysctl.h>

               _syscall1(int, _sysctl, struct __sysctl_args *, args);
               int sysctl(int *name, int nlen, void *oldval, size_t *oldlenp,
               void *newval, size_t newlen)
               {
                   struct __sysctl_args args={name,nlen,oldval,oldlenp,newval,newlen};
                   return _sysctl(&args);
               }

               #define SIZE(x) sizeof(x)/sizeof(x[0])
               #define OSNAMESZ 100

               char osname[OSNAMESZ];
               int osnamelth;
               int name[] = { CTL_KERN, KERN_OSTYPE };

               main(){
               osnamelth = sizeof(osname);

               if (sysctl(name, SIZE(name), osname, &osnamelth, 0, 0))
               perror("sysctl");
               else
               printf("This machine is running %*s\n", osnamelth, osname);
               return 0;
               }



ÐÐÐÐÐ ÐÐÐÐ ÐÐÐЧÐÐÐЯ
       ÐÑи  Ð²Ð´Ð°Ð»Ð¾Ð¼Ñ  завеÑÑÐµÐ½Ð½Ñ  _sysctl  повеÑÑÐ°Ñ 0. ÐÑи
       помилÑÑ Ð¿Ð¾Ð²ÐµÑÑаÑÑÑÑÑ  -1,  а  змÑннÑй  errno
       пÑиÑвоÑÑÑÑÑÑ   Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸.


ÐÐÐÐ ÐÐÐÐÐÐÐ
       ENOTDIR
               Файл name не знайдено.


       EPERM
               ÐÐµÐ¼Ð°Ñ  пÑав на поÑÑк в Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð·
              `каÑалогÑв' Ñи пÑав на ÑиÑÐ°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ,
              ÑкÑо oldval не доÑÑвнÑÑ Ð½ÑлÑ;  Ñи Ð½ÐµÐ¼Ð°Ñ  пÑав
              на запиÑ, ÑкÑо newval не доÑÑвнÑÑ Ð½ÑлÑ.


       EFAULT
               ÐÑв  зÑоблений  Ð·Ð°Ð¿Ð¸Ñ   ÑÑаÑого
              знаÑÐµÐ½Ð½Ñ   ÑлÑÑом вÑÑановленнÑ
              "непоÑожнÑого"  знаÑÐµÐ½Ð½Ñ  oldval, але
              вÑÑановлена довжина oldlenp доÑÑвнÑÑ
              нÑлевÑ.


ÐÐÐÐÐÐÐÐÐÐСТЬ СТÐÐÐÐРТÐÐ
       Ð¦Ñ ÑÑнкÑÑÑ Ð¿ÑизнаÑена лиÑе Ð´Ð»Ñ ÑобоÑи в LÑnux.
       СиÑÑемний виклик   sysctl  ÑпеÑÑе  з'ÑвивÑÑ  в
       LÑnux  1.3.57.  Ðого запозиÑено  з  4.4BSD.  Ðднак,  Ñ
       LÑnux  ÑÑнÑÑ   дзеÑкало /proc/sys,  Ñ  ÑиÑÑема  назв
       об'ÑкÑÑв Ñ LÑnux Ñ BSD 4.4  Ñ ÑÑзноÑ, але визнаÑеннÑ
       ÑÑнкÑÑÑ sysctl(2) аналогÑÑне в Ð¾Ð±Ð¾Ñ ÑиÑÑемаÑ.


ÐÐÐÐÐÐÐÐ ÐÐÐÐÐÐÐ
       Ðазви  об'ÑкÑÑв  ÑÑзнÑÑÑÑÑ  в  ÑÑзноманÑÑниÑ
       веÑÑÑÑÑ ÑдÑа, ТÐÐУ  ЦÐÐ  СÐСТÐÐÐÐÐ  ÐÐÐÐÐÐ  ÐÐ  Ð  ÐÐЮЧÐÐ
       У   ÐÐÐÐТÐÐÐ¥ (аплÑкаÑÑÑÑ).    ÐамÑÑÑÑ    ÑÑого
       можливо   викоÑиÑÑÐ°Ð½Ð½Ñ ÑнÑеÑÑейÑÑ /proc/sys.  Ðе
       вÑÑ  ÑÑнÑÑÑÑ  об'ÑкÑи  опиÑÐ°Ð½Ñ  вÑдповÑдним
       Ñином.  Ðа ÑÑогоднÑÑнÑй  денÑ,  не  ÑлÑд
       змÑнÑваÑи  Ñип  опеÑаÑÑÐ¹Ð½Ð¾Ñ ÑиÑÑеми ÑлÑÑом
       запиÑÑ Ñ Ñайл /proc/sys/kernel/ostype.


ÐÐÐÐТЬСЯ ТÐÐÐÐ
       proc(5)

       ---- ÐеÑеклав ÑкÑаÑнÑÑÐºÐ¾Ñ ÐÑÑалÑй ЦибÑлÑк
       <vi@uatech.atspace.com>




© 2005-2007 DLOU, GNU FDL     2007-10-27-16:31                      sysctl(2)