Scroll to navigation

sysctl(2) System Calls Manual sysctl(2)

NUME

sysctl - citește/scrie parametrii de sistem

REZUMAT

#include <unistd.h>
#include <linux/sysctl.h>
[[depreciat]] int _sysctl(struct __sysctl_args *args);

DESCRIERE

Acest apel de sistem nu mai există pe nucleele actuale! A se vedea NOTE.

Apelul _sysctl() citește și/sau scrie parametrii nucleului. De exemplu, numele de gazdă sau numărul maxim de fișiere deschise. Argumentul are forma


struct __sysctl_args {

int *name; /* vector de numere întregi care descrie variabila */
int nlen; /* lungimea acestui vector */
void *oldval; /* 0 sau adresa unde se stochează vechea valoare */
size_t *oldlenp; /* spațiu disponibil pentru vechea valoare,
suprascris de dimensiunea reală a vechii valori */
void *newval; /* 0 sau adresa noii valori */
size_t newlen; /* dimensiunea noii valori */ };

Acest apel efectuează o căutare într-o structură arborescentă, care poate semăna cu un arbore de directoare sub /proc/sys, iar dacă elementul solicitat este găsit, apelează o rutină adecvată pentru a citi sau modifica valoarea.

VALOAREA RETURNATĂ

La finalizarea cu succes, _sysctl() returnează 0. În caz contrar, se returnează o valoare de -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

Nu există permisiune de căutare pentru unul dintre „directoarele” întâlnite, sau nu există permisiune de citire în cazul în care oldval a fost diferită de zero, sau nu există permisiune de scriere în cazul în care newval a fost diferită de zero.
Invocarea a cerut valoarea anterioară prin stabilirea oldval non-NULL, dar a permis spațiu zero în oldlenp.
name nu a fost găsit.

STANDARDE

Linux.

ISTORIC

Linux 1.3.57. Eliminat în Linux 5.5, glibc 2.32.

Acesta își are originea în 4.4BSD. Numai Linux are oglinda /proc/sys, iar schemele de denumire a obiectelor diferă între Linux și 4.4BSD, dar declarația funcției sysctl() este aceeași în ambele.

NOTE

Utilizarea acestui apel de sistem a fost mult timp descurajată: începând cu Linux 2.6.24, utilizarea acestui apel de sistem a dus la apariția unor avertismente în jurnalul nucleului, iar în Linux 5.5, apelul de sistem a fost în cele din urmă eliminat. Utilizați în schimb interfața /proc/sys.

Rețineți că pe nucleele mai vechi, unde acest apel de sistem încă există, este disponibil numai dacă nucleul a fost configurat cu opțiunea CONFIG_SYSCTL_SYSCALL. În plus, glibc nu oferă o funcție de învăluire pentru acest apel de sistem, fiind necesară utilizarea syscall(2).

ERORI

Numele obiectelor variază de la o versiune de nucleu la alta, ceea ce face ca acest apel de sistem să fie inutil pentru aplicații.

Nu toate obiectele disponibile sunt documentate corespunzător.

Nu este încă posibilă schimbarea sistemului de operare prin scrierea în /proc/sys/kernel/ostype.

EXEMPLE

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <linux/sysctl.h>
#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("Această mașină rulează %*s\n", (int) osnamelth, osname);
exit(EXIT_SUCCESS); }

CONSULTAȚI ȘI

proc(5)

TRADUCERE

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

3 mai 2023 Pagini de manual de Linux 6.05.01