BEZEICHNUNG
sysctl - Systemparameter lesen/schreibenÜBERSICHT
#include <unistd.h> #include <linux/sysctl.h>
[[veraltet]] 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 Formstruct __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; die Glibc-Unterstützung wurde in Version 2.32 entfernt.STANDARDS
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 <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("Auf dieser Maschine läuft %*s\n", (int) osnamelth, osname); exit(EXIT_SUCCESS); }
SIEHE AUCH
proc(5)ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Chris Leick <[email protected]>, Helge Kreutzmann <[email protected]> und Mario Blättermann <[email protected]> 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 die Mailingliste der Übersetzer4. Dezember 2022 | Linux man-pages 6.03 |