summaryrefslogtreecommitdiffstats
path: root/man2/sysctl.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/sysctl.2')
-rw-r--r--man2/sysctl.2145
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)