sysctl(2) System Calls Manual sysctl(2) BEZEICHNUNG sysctl - Systemparameter lesen/schreiben UBERSICHT #include #include [[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 geoffneter Dateien. Das Argument hat die Form struct __sysctl_args { int *name; /* Variable beschreibender Vektor aus Ganzzahlen */ int nlen; /* Lange dieses Vektors */ void *oldval; /* 0 oder Adresse, an der der alte Wert gespeichert werden soll */ size_t *oldlenp; /* verfugbarer Platz fur den alten Wert, uberschrieben durch die tatsachliche Grosse des alten Wertes */ void *newval; /* 0 oder Adresse des neuen Wertes */ size_t newlen; /* Grosse des neuen Wertes */ }; Dieser Aufruf sucht in einer Baumstruktur, die moglicherweise einer Verzeichnisstruktur unter /proc/sys ahnelt, und ruft, wenn das gewunschte Element gefunden wird, eine entsprechende Routine auf, um den Wert zu lesen oder zu verandern. RUCKGABEWERT Bei erfolgreichem Abschluss gibt _sysctl() 0 zuruck. Andernfalls wird ein Wert von -1 zuruckgegeben und errno entsprechend gesetzt. FEHLER EACCES EPERM keine Suchrechte fur 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 dafur aber keinen Platz in oldlenp zur Verfugung. ENOTDIR name wurde nicht gefunden. STANDARDS Linux. GESCHICHTE Linux 1.3.57. Wurde in Linux 5.5, Glibc 2.32 entfernt. Dieser Aufruf entstammt BSD-4.4. Ausschliesslich 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 missbilligt: seit Linux 2.6.24 fuhrte die Verwendung dieses Systemaufrufs zu Warnungen im Kernelprotokoll und in Linux 5.5 wurde der Systemaufruf schliesslich entfernt. Verwenden Sie stattdessen die Schnittstelle /proc/sys. Beachten Sie, dass auf alteren Kerneln, auf denen dieser Systemaufruf noch existiert, er nur verfugbar ist, wenn der Kernel mit der Option CONFIG_SYSCTL_SYSCALL konfiguriert wurde. Desweiteren stellt Glibc keinen Wrapper-Aufruf fur diesen Systemaufruf bereit, daher muss syscall(2) verwandt werden. FEHLER Die Objektnamen verandern sich zwischen Kernel-Versionen, was diesen Systemaufruf fur Anwendungen wertlos macht. Nicht alle verfugbaren Objekte sind richtig dokumentiert. Es ist noch nicht moglich, das Betriebssystem durch Schreiben nach /proc/sys/kernel/ostype zu andern. BEISPIELE #define _GNU_SOURCE #include #include #include #include #include #include #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\n", (int) osnamelth, osname); exit(EXIT_SUCCESS); } SIEHE AUCH proc(5) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Chris Leick , Helge Kreutzmann und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 sysctl(2)