#include <unistd.h>
#include <linux/sysctl.h> int _sysctl(struct __sysctl_args *args);
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 regroupée sous le répertoire /proc/sys, puis, si les valeurs réclamées y sont trouvées, appelle les routines appropriées pour lire ou modifier les valeurs.
Ou plutôt... ne l'appelez pas : l'utilisation de cet appel système est déconseillée depuis bien longtemps, et il est tellemnt indésirable qu'il disparaitra bientôt dans une prochaine version du noyau. Supprimez-le dès à présent de vos programmes ; Utilisez l'interface /proc/sys à la place.
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.
#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(struct __sysctl_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("Cette machine fonctionne avec %*s\n", osnamelth, osname); exit(EXIT_SUCCESS); }
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 15 octobre 1996 et révisée le 23 juin 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 sysctl ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 23 juin 2008