Rechercher une page de manuel
sysctl
Langue: en
Version: 2007-06-01 (openSuse - 09/10/07)
Section: 2 (Appels système)
NAME
sysctl - read/write system parametersSYNOPSIS
#include <unistd.h>
#include <linux/sysctl.h> int _sysctl(struct __sysctl_args *args);
DESCRIPTION
The _sysctl() call reads and/or writes kernel parameters. For example, the hostname, or the maximum number of open files. The argument has the formstruct __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 */ };
This call does a search in a tree structure, possibly resembling a directory tree under /proc/sys, and if the requested item is found calls some appropriate routine to read or modify the value.
RETURN VALUE
Upon successful completion, _sysctl() returns 0. Otherwise, a value of -1 is returned and errno is set to indicate the error.ERRORS
- EFAULT
- The invocation asked for the previous value by setting oldval non-NULL, but allowed zero room in oldlenp.
- ENOTDIR
- name was not found.
- EPERM
- No search permission for one of the encountered `directories', or no read permission where oldval was non-zero, or no write permission where newval was non-zero.
CONFORMING TO
This call is Linux specific, and should not be used in programs intended to be portable. A sysctl() call has been present in Linux since version 1.3.57. It originated in 4.4BSD. Only Linux has the /proc/sys mirror, and the object naming schemes differ between Linux and 4.4BSD, but the declaration of the sysctl(2) function is the same in both.NOTES
Glibc does not provide a wrapper for this system call; call it using syscall(2).BUGS
The object names vary between kernel versions. This makes this system call worthless for applications. Use the /proc/sys interface instead.Not all available objects are properly documented.
It is not yet possible to change operating system by writing to /proc/sys/kernel/ostype.
EXAMPLE
#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); }
SEE ALSO
proc(5)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre