- buster 2.12-1
- buster-backports 2.15-1~bpo10+1
- testing 4.2.0-1
- unstable 4.2.0-1
SYSCTL(2) | Linux-Programmierhandbuch | SYSCTL(2) |
BEZEICHNUNG¶
sysctl - Systemparameter lesen/schreibenÜBERSICHT¶
#include <unistd.h> #include <linux/sysctl.h>
int _sysctl(struct __sysctl_args *args);
BESCHREIBUNG¶
Dieser Systemaufruf existiert auf aktuellen Kerneln nicht mehr! Siehe ANMERKUNGEN.Der Aufruf _sysctl() liest und/oder schreibt Kernel-Parameter, zum Beispiel den Rechnernamen oder die maximale Anzahl geöffneter Dateien. Das Argument hat die Form
struct __sysctl_args { int *name; /* Variable beschreibender Vektor aus Ganzzahlen */ int nlen; /* Länge dieses Vektors */ void *oldval; /* 0 oder Adresse, an der der alte Wert gespeichert werden soll */ size_t *oldlenp; /* verfügbarer Platz für den alten Wert, überschrieben durch die tatsächliche Größe des alten Wertes */ void *newval; /* 0 oder Adresse des neuen Wertes */ size_t newlen; /* Größe des neuen Wertes */ };
Dieser Aufruf sucht in einer Baumstruktur, die möglicherweise einer Verzeichnisstruktur unter /proc/sys ähnelt, und ruft, wenn das gewünschte Element gefunden wird, eine entsprechende Routine auf, um den Wert zu lesen oder zu verändern.
RÜCKGABEWERT¶
Bei erfolgreichem Abschluss gibt _sysctl() 0 zurück. Andernfalls wird ein Wert von -1 zurückgegeben und errno entsprechend gesetzt.FEHLER¶
- EACCES, EPERM
- keine Suchrechte für eines der vorgefundenen »Verzeichnisse«, keine Leserechte, wenn oldval nicht null war oder keine Schreibrechte, wenn newval nicht null war.
- EFAULT
- Der Aufruf fragte nach dem vorherigen Wert durch Setzen von oldval auf einen Wert ungleich NULL, stellte dafür aber keinen Platz in oldlenp zur Verfügung.
- ENOTDIR
- name wurde nicht gefunden.
VERSIONEN¶
Dieser Systemaufruf erschien erstmalig in Linux Version 1.3.57. Er wurde in Linux 5.5 entfernt.KONFORM ZU¶
Dieser Aufruf ist Linux-spezifisch und sollte nicht in portierbaren Programmen benutzt werden. Er entstammt BSD-4.4. Ausschließlich Linux hat das Abbild /proc/sys und die Schemata der Objektbenennung unterscheiden sich in Linux und 4.4BSD, aber die Deklaration der Funktion sysctl() ist in beiden gleich.ANMERKUNGEN¶
Die Verwendung dieses Systemaufrufs war seit langem misbilligt: seit Linux 2.6.24 führte die Verwendung dieses Systemaufrufs zu Warnungen im Kernelprotokoll und in Linux 5.5 wurde der Systemaufruf schließlich entfernt. Verwenden Sie stattdessen die Schnittstelle /proc/sys.Beachten Sie, dass auf älteren Kerneln, auf denen dieser Systemaufruf noch existiert, er nur verfügbar ist, wenn der Kernel mit der Option CONFIG_SYSCTL_SYSCALL konfiguriert wurde. Desweiteren stellt Glibc keinen Wrapper-Aufruf für diesen Systemaufruf bereit, daher muss syscall(2) verwandt werden.
FEHLER¶
Die Objektnamen verändern sich zwischen Kernel-Versionen, was diesen Systemaufruf für Anwendungen wertlos macht.Nicht alle verfügbaren Objekte sind richtig dokumentiert.
Es ist noch nicht möglich, das Betriebssystem durch Schreiben nach /proc/sys/kernel/ostype zu ändern.
BEISPIELE¶
#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("Auf dieser Maschine läuft %*s\n", osnamelth, osname); exit(EXIT_SUCCESS); }
SIEHE AUCH¶
proc(5)KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 5.07 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick <c.leick@vollbio.de> und Helge Kreutzmann <debian@helgefjell.de> erstellt.Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.
9. Juni 2020 | Linux |