table of contents
| sysctl(2) | System Calls Manual | 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Ŷ
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 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.
| 10. februar 2026 | Linux man-pages 6.17 |