Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       sysctl - citește/scrie parametrii de sistem

SINOPSIS

       #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

       EACCES
       EPERM  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.

       EFAULT Invocarea a cerut valoarea anterioară prin stabilirea oldval non-NULL, dar a permis spațiu zero în
              oldlenp.

       ENOTDIR
              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.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                        sysctl(2)