ÜBERSICHT
#include <unistd.h>
#include <linux/sysctl.h>
int _sysctl(struct __sysctl_args *args);
Hinweis: Es gibt keinen Glibc-Wrapper für diesen Systemaufruf; siehe ANMERKUNGEN.
BESCHREIBUNG
Verwenden Sie diesen Systemaufruf nicht! 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
- 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.
- 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.
KONFORM ZU
Dieser Aufruf ist Linux-spezifisch und sollte nicht in portierbaren Programmen benutzt werden. Einen sysctl()-Aufruf gibt es in Linux seit Version 1.3.57. 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
Glibc stellt keinen Wrapper für diesen Systemaufruf bereit; rufen Sie ihn mit syscall(2) auf. Oder besser … rufen Sie ihn nicht auf: Von der Benutzung dieses Systemaufrufs wird seit langen abgeraten und er ist so unbeliebt, dass er wahrscheinlich in einer künftigen Kernel-Version verschwinden wird. Seit Linux 2.6.24 führt die Verwendung dieses Systemaufrufs zu Warnungen in der Kernel-Protokolldatei. Entfernen Sie ihn jetzt aus Ihren Programmen und benutzen Sie stattdessen die Schnittstelle /proc/sys.Dieser Systemaufruf ist nur verfügbar, wenn der Kernel mit der Option CONFIG_SYSCTL_SYSCALL konfiguriert wurde.
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.
BEISPIEL
#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); }
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.06 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 <[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 <[email protected]>.