diff options
Diffstat (limited to 'upstream/fedora-rawhide/man2/sysctl.2')
-rw-r--r-- | upstream/fedora-rawhide/man2/sysctl.2 | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/upstream/fedora-rawhide/man2/sysctl.2 b/upstream/fedora-rawhide/man2/sysctl.2 new file mode 100644 index 00000000..7e9f185b --- /dev/null +++ b/upstream/fedora-rawhide/man2/sysctl.2 @@ -0,0 +1,160 @@ +.\" Copyright (C) 1996 Andries Brouwer (aeb@cwi.nl) +.\" +.\" SPDX-License-Identifier: Linux-man-pages-copyleft +.\" +.\" 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 2023-10-31 "Linux man-pages 6.06" +.SH NAME +sysctl \- read/write system parameters +.SH SYNOPSIS +.nf +.B #include <unistd.h> +.B #include <linux/sysctl.h> +.P +.BI "[[deprecated]] int _sysctl(struct __sysctl_args *" args ); +.fi +.SH DESCRIPTION +.B This system call no longer exists on current kernels! +See NOTES. +.P +The +.BR _sysctl () +call reads and/or writes kernel parameters. +For example, the hostname, +or the maximum number of open files. +The argument has the form +.P +.in +4n +.EX +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 */ +}; +.EE +.in +.P +This call does a search in a tree structure, possibly resembling +a directory tree under +.IR /proc/sys , +and if the requested item is found calls some appropriate routine +to read or modify the value. +.SH RETURN VALUE +Upon successful completion, +.BR _sysctl () +returns 0. +Otherwise, a value of \-1 is returned and +.I errno +is set to indicate the error. +.SH ERRORS +.TP +.B EACCES +.TQ +.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. +.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. +.SH STANDARDS +Linux. +.SH HISTORY +Linux 1.3.57. +Removed in Linux 5.5, glibc 2.32. +.P +It originated in +4.4BSD. +Only Linux has the +.I /proc/sys +mirror, and the object naming schemes differ between Linux and 4.4BSD, +but the declaration of the +.BR sysctl () +function is the same in both. +.SH NOTES +Use of this system call was long discouraged: +since Linux 2.6.24, +uses of this system call result in warnings in the kernel log, +and in Linux 5.5, the system call was finally removed. +Use the +.I /proc/sys +interface instead. +.P +Note that on older kernels where this system call still exists, +it is available only if the kernel was configured with the +.B CONFIG_SYSCTL_SYSCALL +option. +Furthermore, glibc does not provide a wrapper for this system call, +necessitating the use of +.BR syscall (2). +.SH BUGS +The object names vary between kernel versions, +making this system call worthless for applications. +.P +Not all available objects are properly documented. +.P +It is not yet possible to change operating system by writing to +.IR /proc/sys/kernel/ostype . +.SH EXAMPLES +.\" SRC BEGIN (sysctl.c) +.EX +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/syscall.h> +#include <unistd.h> +\& +#include <linux/sysctl.h> +\& +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +\& +int _sysctl(struct __sysctl_args *args); +\& +#define OSNAMESZ 100 +\& +int +main(void) +{ + int name[] = { CTL_KERN, KERN_OSTYPE }; + char osname[OSNAMESZ]; + size_t osnamelth; + struct __sysctl_args args; +\& + memset(&args, 0, sizeof(args)); + args.name = name; + args.nlen = ARRAY_SIZE(name); + 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\en", (int) osnamelth, osname); + exit(EXIT_SUCCESS); +} +.EE +.\" SRC END +.SH SEE ALSO +.BR proc (5) |