sysctl

Autres langues

Langue: ja

Version: 2007-06-01 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

̾Á°

sysctl - ¥·¥¹¥Æ¥à¡¦¥Ñ¥é¥á¡¼¥¿¡¼¤òÆɤ߽ñ¤­¤¹¤ë

½ñ¼°


#include <unistd.h>


#include <linux/sysctl.h> int _sysctl(struct __sysctl_args *args);

ÀâÌÀ

_sysctl() ¥³¡¼¥ë¤Ï¥«¡¼¥Í¥ë¥Ñ¥é¥á¡¼¥¿¡¼¤òÆɤ߽ñ¤­¤¹¤ë¡£Î㤨¤Ð¡¢ ¥Û¥¹¥È¥Í¡¼¥à¤äƱ»þ¤Ë¥ª¡¼¥×¥ó¤Ç¤­¤ë¥Õ¥¡¥¤¥ë¤ÎºÇÂç¿ô¤Ê¤É¡£ °ú¤­¿ô¤Ï°Ê²¼¤Î·Á¼°¤Ç¤¢¤ë¡£

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 */

};

¤³¤Î¥³¡¼¥ë¤Ï /proc/sys ¤Î²¼¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¦¥Ä¥ê¡¼¤Ë»÷¤¿ÌÚ¹½Â¤(tree structure)¤ò¸¡º÷¤¹¤ë¡£ ¤½¤·¤Æ¡¢Í׵ᤵ¤ì¤¿¹àÌܤ¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤ÏŬÀڤʥ롼¥Á¥ó¤ò¸Æ¤Ó½Ð¤·¤Æ ÃͤòÆɤó¤À¤ê½¤Àµ¤·¤¿¤ê¤¹¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¤Ï _sysctl() ¤Ï 0 ¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¡¢-1 ¤¬ÊÖ¤µ¤ì¡¢ errno ¤¬¤½¤Î¥¨¥é¡¼¤ò¼¨¤¹ÃͤËÀßÄꤵ¤ì¤ë¡£

¥¨¥é¡¼

EFAULT
oldval ¤Ë NULL ¤Ç¤Ê¤¤ÃͤòÀßÄꤷ¤Æ¡¢°ÊÁ°¤ÎÃͤòÍ׵ᤷ¤Æ¤¤¤ë¤Î¤Ë¡¢ oldlenp ¤Ë¶õ¤­¤¬¤Ê¤¤¡£
ENOTDIR
name ¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¡£
EPERM

 '¥Ç¥£¥ì¥¯¥È¥ê'¤Î¤É¤ì¤«¤Ë¸¡º÷µö²Ä¤¬¤Ê¤«¤Ã¤¿¤«¡¢ oldval ¤¬ 0 ¤Ç¤Ê¤¤¤Î¤ËÆɤ߹þ¤ßµö²Ä¤¬¤Ê¤«¤Ã¤¿¤«¡¢ newval ¤¬ 0 ¤Ç¤Ê¤¤¤Î¤Ë½ñ¤­¹þ¤ßµö²Ä¤¬¤Ê¤«¤Ã¤¿¡£

½àµò

¤³¤Î¥³¡¼¥ë¤Ï Linux ÆÃÍ­¤Ç¤¢¤ê¡¢°Ü¿¢¤ò°Õ¿Þ¤·¤¿¥×¥í¥°¥é¥à¤Ç»ÈÍѤ·¤Æ¤Ï ¤¤¤±¤Ê¤¤¡£

Îò»Ë

sysctl() ¥³¡¼¥ë¤Ï Linux ¤Î¥Ð¡¼¥¸¥ç¥ó 1.3.57 ¤«¤é¸ºß¤·¤Æ¤¤¤ë¡£ ¤³¤ì¤Ï 4.4BSD ¤ËͳÍ褷¤Æ¤¤¤ë¡£Linux ¤Ï /proc/sys ¤Ë¼Ì¤·(mirror)¤ò¤â¤Ã¤Æ¤ª¤ê¡¢¹àÌܤÎ̾Á°¤ÎÉÕ¤±Êý¤¬ Linux ¤È 4.4BSD ¤Ç¤Ï °Û¤Ã¤Æ¤¤¤ë¡£¤·¤«¤· sysctl(2) ´Ø¿ô¤ÎÀë¸À¤ÏξÊý¤ÇƱ¤¸¤Ç¤¢¤ë¡£

¥Ð¥°

¥ª¥Ö¥¸¥§¥¯¥È¤Î̾Á°¤Ï¡¢¥«¡¼¥Í¥ë¤Î¥Ð¡¼¥¸¥ç¥ó¤´¤È¤ËÈó¾ï¤Ë°Û¤Ê¤Ã¤Æ¤¤¤ë¡£ ¡Ö¤³¤Î¤¿¤á¡¢¤³¤Î¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤È¤Ã¤Æ̵²ÁÃÍ¤Ê ¤â¤Î¤È¤Ê¤Ã¤Æ¤¤¤ë¡× ¤«¤ï¤ê¤Ë /proc/sys ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò»ÈÍѤ¹¤ë¤³¤È¡£

Á´¤Æ¤Î²Äǽ¤Ê¹àÌܤ¬Àµ³Î¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¡£

º£¤Î¤È¤³¤í /proc/sys/kernel/ostype ¤Ë½ñ¤­¹þ¤à¤³¤È¤Ç¥ª¥Ú¡¼¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤òÊѤ¨¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¡£

Îã


#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);

}

Ãí°Õ

glibc ¤Ï¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÂФ¹¤ë¥é¥Ã¥Ñ¡¼´Ø¿ô¤òÄ󶡤·¤Æ¤¤¤Ê¤¤¡£ syscall(2) ¤ò»È¤Ã¤Æ¸Æ¤Ó½Ð¤¹¤³¤È¡£

´ØÏ¢¹àÌÜ

proc(5)