sysctl(2)

NAVN
sysctl - læs/skriv systemparametre

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

[[deprecated]] int _sysctl(struct __sysctl_args *args);

BESKRIVELSE
Dette systemkald findes ikke længere på aktuelle kerner! Se NOTER.

Kaldet _sysctl() læser og/eller skriver kerneparametre. For eksempel værtsnavnet eller det maksimalt antal åbne filer. Argumentet har formen

    struct __sysctl_args {
        int    *name;    /* heltalvektor der beskriver variabel */
        int     nlen;    /* antallet af elementer for denne vektor */
        void   *oldval;  /* 0 eller adresse hvor gammel værdi skal lagres */
        size_t *oldlenp; /* tilgængelig plads for gammel værdi,
                            overskrevet af faktisk størrelse på gammel værdi */
        void   *newval;  /* 0 eller adresse for ny værdi */
        size_t  newlen;  /* størrele på ny værdi */
    };

Dette kald udfører en søgning i en træstruktur, der muligt ligner et mappetræ under /proc/sys, og hvis anmodet element findes kaldes en passende rutine til at læse eller ændre værdien.

RETURVÆRDI
Ved succesfuld fuldførelse returnerer _sysctl() 0. Ellers returneres en værdi på -1 og errno angives for at indikere fejlen.

FEJL

EACCES
EPERM
    Ingen søgerettighed for en af de mødte »mapper« eller ingen læserettighed hvor oldval var forskellig fra nul, eller ingen skriverettighed hvor newval var forskellige fra nul.

EFAULT
    Igangsættelsen spurgte efter den tidligere værdi ved at angive oldval til forskellig fra nul, men tillod nul plads i oldlenp.

ENOTDIR
    navn blev ikke fundet.

STANDARDER
Linux.

HISTORIK
4.4BSD, Linux 1.3.57. Fjernet i Linux 5.5, glibc 2.32.

Kun Linux har spejlet /proc/sys og objektnavneskemaerne er forskellige for Linux og 4.4BSD, men erklæringen af funktionen sysctl() er den samme i begge.

NOTER
Brug af dette systemkald blev længe frarådet: siden Linux 2.6.24 medfører brug af dette systemkald advarsler i kerneloggen og i Linux 5.5 blev systemkaldet endelig fjernet. Brug grænsefladen /proc/sys i stedet for.

Bemærk at på ældre kerner hvor dette systemkald stadig findes, så er det kun tilgængeligt hvis kernen blev konfigureret med tilvalget CONFIG_SYSCTL_SYSCALL. Derudover tilbyder glibc ikke et omslag for dette systemkald, hvilket nødvendiggør brug af syscall(2).

FEJL
Objektnavnene er forskellige mellem kerneversioner, hvilket gør dette systemkald værdiløst for programmer.

Ikke alle tilgængelige objekter er korrekt dokumenterede.

Det er endnu ikke muligt at ændre operativsystem ved at skrive til /proc/sys/kernel/ostype.

EKSEMPLER
    #define _GNU_SOURCE
    #include <stdcountof.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/syscall.h>
    #include <unistd.h>

    #include <linux/sysctl.h>

    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 = countof(name);
        args.oldval = osname;
        args.oldlenp = &osnamelth;

        osnamelth = sizeof(osname);

        if (syscall(SYS__sysctl, &args) == -1) {
            perror("_sysctl");
            exit(EXIT_FAILURE);
        }
        printf("Denne maskine afvikler %*s\n", (int) osnamelth, osname);
        exit(EXIT_SUCCESS);
    }

SE OGSÅ
proc(5)

OVERSÆTTELSE
Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>

Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR.

Hvis du støder på fejl i oversættelsen af ​​denne vejledning, skal du sende en besked til debian-l10n-danish@lists.debian.org.