sysctl

SYSCTL(2)                  리ëì¤ íë¡ê·¸ë머 매ë´ì¼                 SYSCTL(2)



ì´ë¦
       sysctl - ìì¤í íë¼ë¯¸í°ë¤ì ì½ê³  ì´ë¤.

ì¬ì©ë²
       #include <unistd.h>

       #include <linux/unistd.h>

       #include <linux/sysctl.h>

       _syscall1(int, _sysctl, struct __sysctl_args *, args);

       int _sysctl(struct __sysctl_args *args);

ì¤ëª
       _sysctl ìì¤í ì½ì 커ë í리미í°ë¤ì ì½ê³  ì´ë¤.  ì를 ë¤ì´, í¸ì¤í¸
       ì´ë¦ì´ë ì´ë¦° íì¼ë¤ì ìµë ì ë±ì´ë¤.  ì¸ìë ë¤ìê³¼ ê°ì ííì´ë¤:

       struct __sysctl_args {
               int *name;        /* ë³ì를 ê°ë¦¬í¤ë integer vector */
               int nlen;         /* ì´ ë²¡í°ì 길ì´*/
               void *oldval;     /* 0 ëë ìì  ê°ì ì ì¥í기 ìí 주ì*/
               size_t *oldlenp;  /* ìì  ê°ì ìí´ ì´ì©í ì ìë ê³µê°,
                                  ìì  ê°ì ì¤ì  í¬ê¸°ì ìí´ ìì ì°ì¬ì§ë¤.*/
               void *newval;     /* 0 ëë ìë¡ì´ ê°ì 주ì*/
               size_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 = SIZE(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  ë§ë `directories'ì¤ íëì ëí íì íê°ê¶ì´ ìê±°ë, oldval ê° 0ì´
              ìëê³³ì ì½ê¸° íê°ê¶ì´ ìê±°ë, newval ì´ 0ì´ ìëê³³ì ì°ê¸° íê°ê¶ì´
              ìë¤.

       EFAULT í¸ì¶ì non-NULLì¸ oldval 를 ì¤ì íì¬ ì  ê°ì ì구íì§ë§, oldlenpì
              ìë ê³³ì 0 ì íê°íë¤.

í¸í
       ì´ í¨ìë 리ëì¤ì ìì¡´íë©° í¸íì±ì ì¼ëì ë íë¡ê·¸ë¨ìì ì¬ì©í´ìë ìëë¤.

       sysctl ìì¤í ì½ì Linux ë²ì  1.3.57ì´íë¶í° ì¡´ì¬íë¤.  ì´ê²ì 4.4BSDì
       기ë°ì ëê³  ìë¤. ë¨ì§ 리ëì¤ë§ì´ /proc/sys 를 ë°ìíê³  ìì¼ë©° ê°ì²´
       ì´ë¦ 구조ë¤ì Linuxì BSD 4.4ìì ìë¡  ë¤ë¥´ë¤.  ê·¸ë¬ë, sysctl(2)í¨ìì
       ì ì¸ì ì쪽 모ë ê°ë¤.

ë²ê·¸
       ê°ì²´ ì´ë¦ë¤ì 커ë ë²ì ì ë°ë¼ ë¤ë¥¸ë¤.  ì´ ìì¤í ì½ì ìì©íë¡ê·¸ë¨ììë
       ì¸ëª¨ê° ìë¤.  ëì ì /proc/sys 를 ì¬ì©í´ë¼.
       ì´ì©í ì ìë ëª¨ë  ê°ì²´ë¤ì´ 문ìí ëì´ ìì§ë ìë¤.
       ìì§ì /proc/sys/kernel/ostypeì ì°ê¸°ë¥¼ íì¬ OS를 ë³ê²½íëê²ì ê°ë¥íì§
       ìë¤.

ê´ë ¨ í목
       proc(5)

ìì
       ì ê°í <skyeyes@soback.kornet.net>, 2000ë 7ì 8ì¼



Linux 1.3.85                     1996ë 5ì 11ì¼                       SYSCTL(2)