sysctl

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);

       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
       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.

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);
       }

SIEHE AUCH
       proc(5)

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.03 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> 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>.



Linux                            6. März 2019                       SYSCTL(2)