diff options
Diffstat (limited to 'man2/sysctl.2')
-rw-r--r-- | man2/sysctl.2 | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/man2/sysctl.2 b/man2/sysctl.2 new file mode 100644 index 000000000..1fc101b13 --- /dev/null +++ b/man2/sysctl.2 @@ -0,0 +1,145 @@ +.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl) +.\" +.\" Permission is granted to make and distribute verbatim copies of this +.\" manual provided the copyright notice and this permission notice are +.\" preserved on all copies. +.\" +.\" Permission is granted to copy and distribute modified versions of this +.\" manual under the conditions for verbatim copying, provided that the +.\" entire resulting derived work is distributed under the terms of a +.\" permission notice identical to this one. +.\" +.\" Since the Linux kernel and libraries are constantly changing, this +.\" manual page may be incorrect or out-of-date. The author(s) assume no +.\" responsibility for errors or omissions, or for damages resulting from +.\" the use of the information contained herein. The author(s) may not +.\" have taken the same level of care in the production of this manual, +.\" which is licensed free of charge, as they might when working +.\" professionally. +.\" +.\" Formatted or processed versions of this manual, if unaccompanied by +.\" the source, must acknowledge the copyright and authors of this work. +.\" +.\" Written 11 April 1996 by Andries Brouwer <aeb@cwi.nl> +.\" 960412: Added comments from Stephen Tweedie +.\" Modified Tue Oct 22 22:28:41 1996 by Eric S. Raymond <esr@thyrsus.com> +.\" Modified Mon Jan 5 20:31:04 1998 by aeb. +.\" +.TH SYSCTL 2 1996-04-11 "Linux 1.3.85" "Linux Programmer's Manual" +.SH NAME +sysctl \- read/write system parameters +.SH SYNOPSIS +.B #include <unistd.h> +.sp +.B #include <linux/unistd.h> +.sp +.B #include <linux/sysctl.h> +.sp +.B _syscall1(int, _sysctl, struct __sysctl_args *, args); +.sp +.BI "int _sysctl(struct __sysctl_args *" args ); +.SH DESCRIPTION +The +.B _sysctl +call reads and/or writes kernel parameters. For example, the hostname, +or the maximum number of open files. The argument has the form +.PP +.nf +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 */ +}; +.fi +.PP +This call does a search in a tree structure, possibly resembling +a directory tree under +.BR /proc/sys , +and if the requested item is found calls some appropriate routine +to read or modify the value. + +.SH EXAMPLE +.nf +#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("This machine is running %*s\en", osnamelth, osname); + return 0; +} +.fi + +.SH "RETURN VALUE" +Upon successful completion, +.B _sysctl +returns 0. Otherwise, a value of \-1 is returned and +.I errno +is set to indicate the error. +.SH ERRORS +.TP +.B EFAULT +The invocation asked for the previous value by setting +.I oldval +non-NULL, but allowed zero room in +.IR oldlenp . +.TP +.B ENOTDIR +.I name +was not found. +.TP +.B EPERM +No search permission for one of the encountered `directories', +or no read permission where +.I oldval +was nonzero, or no write permission where +.I newval +was nonzero. +.SH "CONFORMING TO" +This call is Linux-specific, and should not be used in programs +intended to be portable. +A +.B sysctl +call has been present in Linux since version 1.3.57. It originated in +4.4BSD. Only Linux has the +.I /proc/sys +mirror, and the object naming schemes differ between Linux and BSD 4.4, +but the declaration of the +.BR sysctl (2) +function is the same in both. +.SH BUGS +The object names vary between kernel versions. +THIS MAKES THIS SYSTEM CALL WORTHLESS FOR APPLICATIONS. +Use the +.I /proc/sys +interface instead. +.br +Not all available objects are properly documented. +.br +It is not yet possible to change operating system by writing to +.IR /proc/sys/kernel/ostype . +.SH "SEE ALSO" +.BR proc (5) |