#include <unistd.h> #include <linux/sysctl.h> [[obsolète]] int _sysctl(struct __sysctl_args *args);
L'appel système _sysctl() lit et/ou écrit les paramètres du noyau. Par exemple, le nom d'hôte ou le nombre maximal de fichiers ouverts. L'argument a la forme
struct __sysctl_args {
int *name; /* tableau d'entiers décrivant la variable */
int nlen; /* longueur de ce tableau */
void *oldval; /* 0 ou adresse où stocker l'ancienne valeur */
size_t *oldlenp; /* espace disponible pour l'ancienne valeur,
remplacé par la taille réelle de cette valeur */
void *newval; /* 0 ou adresse de la nouvelle valeur */
size_t newlen; /* taille de la nouvelle valeur */
};
Cet appel effectue une recherche dans la structure arborescente, sans doute de type arbre de répertoires sous /proc/sys, puis, si les valeurs réclamées y sont trouvées, appelle les routines appropriées pour lire ou modifier les valeurs.
Veuillez noter que sur les anciens noyaux où cet appel système existe encore, il n'est disponible que si le noyau a été configuré avec l'option CONFIG_SYSCTL_SYSCALL. En outre, la glibc ne founit pas de fonction d'enveloppe pour cet appel système, imposant l'utilisation de syscall(2).
Tous les objets disponibles ne sont pas correctement documentés.
Il n'est pas possible de changer de système d'exploitation en écrivant dans /proc/sys/kernel/ostype.
#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("Cette machine fonctionne avec %*s\n", (int) osnamelth, osname);
exit(EXIT_SUCCESS);
}
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à