#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)ÇÔ¼öÀÇ ¼±¾ðÀº ¾çÂÊ ¸ðµÎ °°´Ù.