sysctl(2) System Calls Manual sysctl(2) NUME sysctl - citete/scrie parametrii de sistem REZUMAT #include #include [[depreciat]] int _sysctl(struct __sysctl_args *args); DESCRIERE Acest apel de sistem nu mai exista pe nucleele actuale! A se vedea NOTE. Apelul _sysctl() citete i/sau scrie parametrii nucleului. De exemplu, numele de gazda sau numarul maxim de fiiere deschise. Argumentul are forma struct __sysctl_args { int *name; /* vector de numere intregi care descrie variabila */ int nlen; /* lungimea acestui vector */ void *oldval; /* 0 sau adresa unde se stocheaza vechea valoare */ size_t *oldlenp; /* spaiu disponibil pentru vechea valoare, suprascris de dimensiunea reala a vechii valori */ void *newval; /* 0 sau adresa noii valori */ size_t newlen; /* dimensiunea noii valori */ }; Acest apel efectueaza o cautare intr-o structura arborescenta, care poate semana cu un arbore de directoare sub /proc/sys, iar daca elementul solicitat este gasit, apeleaza o rutina adecvata pentru a citi sau modifica valoarea. VALOAREA RETURNATA La finalizarea cu succes, _sysctl() returneaza 0. In caz contrar, se returneaza o valoare de -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EACCES EPERM Nu exista permisiune de cautare pentru unul dintre ,,directoarele" intalnite, sau nu exista permisiune de citire in cazul in care oldval a fost diferita de zero, sau nu exista permisiune de scriere in cazul in care newval a fost diferita de zero. EFAULT Invocarea a cerut valoarea anterioara prin stabilirea oldval non-NULL, dar a permis spaiu zero in oldlenp. ENOTDIR name nu a fost gasit. STANDARDE Linux. ISTORIC Linux 1.3.57. Eliminat in Linux 5.5, glibc 2.32. Acesta ii are originea in 4.4BSD. Numai Linux are oglinda /proc/sys, iar schemele de denumire a obiectelor difera intre Linux i 4.4BSD, dar declaraia funciei sysctl() este aceeai in ambele. NOTE Utilizarea acestui apel de sistem a fost mult timp descurajata: incepand cu Linux 2.6.24, utilizarea acestui apel de sistem a dus la apariia unor avertismente in jurnalul nucleului, iar in Linux 5.5, apelul de sistem a fost in cele din urma eliminat. Utilizai in schimb interfaa /proc/sys. Reinei ca pe nucleele mai vechi, unde acest apel de sistem inca exista, este disponibil numai daca nucleul a fost configurat cu opiunea CONFIG_SYSCTL_SYSCALL. In plus, glibc nu ofera o funcie de invaluire pentru acest apel de sistem, fiind necesara utilizarea syscall(2). ERORI Numele obiectelor variaza de la o versiune de nucleu la alta, ceea ce face ca acest apel de sistem sa fie inutil pentru aplicaii. Nu toate obiectele disponibile sunt documentate corespunzator. Nu este inca posibila schimbarea sistemului de operare prin scrierea in /proc/sys/kernel/ostype. EXEMPLE #define _GNU_SOURCE #include #include #include #include #include #include #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("Aceasta maina ruleaza %*s\n", (int) osnamelth, osname); exit(EXIT_SUCCESS); } CONSULTAI I proc(5) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 sysctl(2)