Home :: International :: Manuals :: Howto :: FAQ :: Man Pages :: Email Login

 
 

 

SYSCTL

Section: Bibliotheksfunktionen (2)
Updated: 24. Juni 1996
Index Return to Main Contents
 

NAME

sysctl - lese/schreibe Systemparameter  

ÜBERSICHT

#include <unistd.h>

#include <linux/unistd.h>

#include <linux/sysctl.h>

_syscall1(int, _sysctl, struct __sysctl_args *, args);

int _sysctl(struct __sysctl_args *args);  

BESCHREIBUNG

Der Aufruf _sysctl liest und/oder schreibt Kernel-Parameter, zum Beispiel den Rechnernamen oder die maximale Anzahl geo^ffneter Dateien. Das Argument hat die Form

struct __sysctl_args {
        int *name;        /* ganzzahliger Vektor, der eine Variable
                             beschreibt */
        int nlen;         /* Länge dieses Vektors */
        void *oldval;     /* 0 oder Adresse, wo der alte Wert gespeichert
                             werden soll */
        size_t *oldlenp;  /* freier Raum für den alten Wert, überschrieben
                             durch die aktuelles Größe des alten Wertes */
        void *newval;     /* 0 oder Adresse des neuen Wertes */
        size_t newlen;    /* Länge des neuen Wertes */
};

Dieser Aufruf sucht in einer Baumstruktur, die möglicherweise einer Verzeichnisstruktur unter /proc/sys ähnelt, und ruft, wenn der geforderte Punkt gefunden wird, eine entsprechende Routine auf, um den Wert zu lesen oder zu verändern.

 

BEISPIEL

#include <linux/unistd.h>
#include <linux/types.h>
#include <linux/sysctl.h>

_syscall1(int, _sysctl, struct __sysctl_args *, args);
int sysctl(int *name, int nlen, void *oldval, size_t *oldlenp,
           void *newval, size_t newlen)
{
        struct __sysctl_args args={name,nlen,oldval,oldlenp,newval,newlen};
        return _sysctl(&args);
}

#define SIZE(x) sizeof(x)/sizeof(x[0])
#define OSNAMESZ 100

char osname[OSNAMESZ];
int osnamelth;
int name[] = { CTL_KERN, KERN_OSTYPE };

main(){
        osnamelth = SIZE(osname);
        if (sysctl(name, SIZE(name), osname, &osnamelth, 0, 0))
                perror("sysctl");
        else
                printf("This machine is running %*s\n", osnamelth, osname);
        return 0;
}

 

RÜCKGABEWERTE

Bei erfolgreicher beendigung gibt _sysctl 0 zurück. Anderenfalls wird ein Wert von -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.  

FEHLER

ENOTDIR
name wurde nicht gefunden.
EPERM
Keine Such-Berechtigung für eines der auftretenden `Verzeichnisse', oder keine Leseberechtigung wenn oldval nicht null war, oder keine Schreibberechtigung wenn newval nicht null war.
EFAULT
Der Aufruf fragte nach dem vorherigen Wert durch setzen von oldval auf nicht null, aber erlaubte Null Raum in oldlenp.
 

KONFORM ZU

Dieser Aufruf ist Linux-spezifisch.  

GESCHICHTE

Einen Aufruf sysctl gibt es in Linux seit Version 1.3.57. Er entstand in BSD-4.4. Ausschlies^lich Linux hat das Abbild /proc/sys. Schemata der Objektbenennung unterscheiden sich in Linux und BSD 4.4, aber die Deklaration der Funktion sysctl(2) sind in beiden die gleiche.  

BUGS

Nicht alles verfügbaren Objekte sind richtig dokumentiert.
Es ist noch nicht möglich, das Betriebssystem durch schreiben nach /proc/sys/kernel/ostype zu ändern.  

SIEHE AUCH

proc(5).


 

Index

NAME
ÜBERSICHT
BESCHREIBUNG
BEISPIEL
RÜCKGABEWERTE
FEHLER
KONFORM ZU
GESCHICHTE
BUGS
SIEHE AUCH

 
 
 
 
Google
  Web Linuxinfor   
 

Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account

Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright.

1999-2006 Linuxinfor.com. No rights reserved.