SYSCTL(2)

NOME
sysctl - lê/escreve parâmetros do sistema

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

int _sysctl(struct __sysctl_args *args);

DESCRIÇÃO
This system call no longer exists on current kernels! See NOTES.

A chamada _sysctl() lê e/ou escrever parâmetros do kernel. Por exemplo, o nome da máquina, ou o número máximo de arquivos abertos. O argumento tem a forma

    struct __sysctl_args {
        int    *name;    /* integer vector describing variable */
        int     nlen;    /* length of this vector */
        void   *oldval;  /* 0 or address where to store old value */
        size_t *oldlenp; /* available room for old value,
                            overwritten by actual size of old value */
        void   *newval;  /* 0 or address of new value */
        size_t  newlen;  /* size of new value */
    };

Esta chamada faz um busca numa árvore de estrutura, possivelmente parecida com uma árvore de diretório sob /proc/sys, e se o item requisitado é encontrado é chamada alguma rotina apropriada para ler ou modificar o valor.

VALOR DE RETORNO
Em caso de sucesso _sysctl() devolve 0. Caso contráio, -1 é devolvido e errno é selecionado adequadamente.

ERROS

EACCES, EPERM
    No search permission for one of the encountered "directories", or no read permission where oldval was nonzero, or no write permission where newval was nonzero.

EFAULT
    O pedido perguntou pelo valor anterior selecionando oldval como não nulo, mas permitido zero espaço em oldlenp.

ENOTDIR
    name não foi encontrado.

VERSÕES
This system call first appeared in Linux 1.3.57. It was removed in Linux 5.5; glibc support was removed in version 2.32.

DE ACORDO COM
Esta chamada é específica do Linux e não deve ser usada em programas que pretendem ser portáveis. . Ela é originária do BSD 4.4. Somente o Linux tem o espelho /proc/sys, e os esquemas de nomeamento de objetos diferem entro o Linux e o 4.4BSD, mas a declaração da função sysctl() é a mesma em ambos.

NOTAS
Use of this system call was long discouraged: since Linux 2.6.24, uses of this system call result in warnings in the kernel log, and in Linux 5.5, the system call was finally removed. Use the /proc/sys interface instead.

Note that on older kernels where this system call still exists, it is available only if the kernel was configured with the CONFIG_SYSCTL_SYSCALL option. Furthermore, glibc does not provide a wrapper for this system call, necessitating the use of syscall(2).

BUGS
The object names vary between kernel versions, making this system call worthless for applications.

Nem todos objetos disponíveis são documentados adequadamente.

Ainda não é possível mudar sistema operacional escrevendo /proc/sys/kernel/ostype.

EXEMPLOS
    #define _GNU_SOURCE
    #include <unistd.h>
    #include <sys/syscall.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <linux/sysctl.h>

    int _sysctl(struct __sysctl_args *args );

    #define OSNAMESZ 100

    int
    main(void)
    {
        struct __sysctl_args args;
        char osname[OSNAMESZ];
        size_t osnamelth;
        int name[] = { CTL_KERN, KERN_OSTYPE };

        memset(&args, 0, sizeof(args));
        args.name = name;
        args.nlen = sizeof(name)/sizeof(name[0]);
        args.oldval = osname;
        args.oldlenp = &osnamelth;

        osnamelth = sizeof(osname);

        if (syscall(SYS__sysctl, &args) == -1) {
            perror("_sysctl");
            exit(EXIT_FAILURE);
        }
        printf("This machine is running %*s\n", osnamelth, osname);
        exit(EXIT_SUCCESS);
    }

VEJA TAMBÉM
proc(5)

COLOFÃO
Esta página faz parte da versão 5.10 do projeto Linux man-pages. Uma descrição do projeto, informações sobre relatórios de bugs e a versão mais recente desta página podem ser encontradas em https://www.kernel.org/doc/man-pages/.

TRADUÇÃO
A tradução para português brasileiro desta página man foi criada por André Luiz Fassone <lonely_wolf@ig.com.br> e Marcelo Pereira da Silva <marcelo@pereira.com>

Esta tradução é uma documentação livre; leia a Licença Pública Geral GNU Versão 3 (https://www.gnu.org/licenses/gpl-3.0.html) ou posterior para as condições de direitos autorais. Nenhuma responsabilidade é aceita.

Se você encontrar algum erro na tradução desta página de manual, envie um e-mail para a lista de discussão de tradutores (debian-l10n-portuguese@lists.debian.org).