#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; /* вектор в виде целого числа, описывающий переменную */
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 = sizeof(osname);
if (sysctl(name, SIZE(name), osname, &osnamelth, 0, 0))
perror("sysctl");
else
printf("Эта машина работает в %*s\n", osnamelth, osname);
return 0;
}
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |