#include <linux/unistd.h>
#include <linux/sysctl.h>
_syscall1(int, _sysctl, struct __sysctl_args *, args);
int _sysctl(struct __sysctl_args *args);
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 ½Ã½ºÅÛ ÄÝÀº Linux ¹öÀü 1.3.57ÀÌÈĺÎÅÍ Á¸ÀçÇÑ´Ù. À̰ÍÀº 4.4BSD¿¡ ±â¹ÝÀ» µÎ°í ÀÖ´Ù. ´ÜÁö ¸®´ª½º¸¸ÀÌ /proc/sys ¸¦ ¹Ý¿µÇϰí ÀÖÀ¸¸ç °´Ã¼ À̸§ ±¸Á¶µéÀº Linux¿Í BSD 4.4¿¡¼ ¼·Î ´Ù¸£´Ù. ±×·¯³ª, sysctl(2)ÇÔ¼öÀÇ ¼±¾ðÀº ¾çÂÊ ¸ðµÎ °°´Ù.