Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       delete_module - Décharger un module de noyau

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <fcntl.h>            /* Definition of O_* constants */
       #include <sys/syscall.h>      /* Definition of SYS_* constants */
       #include <unistd.h>

       int syscall(SYS_delete_module, const char *name, unsigned int flags);

       Note :  la  glibe  ne  fournit  pas  d'enveloppe  autour  de  delete_module(), nécessitant
       l'utilisation de syscall(2).

DESCRIPTION

       L'appel système delete_module() essaye  de  supprimer  une  entrée  de  module  chargeable
       inutilisée identifiée par name. Si le module à une fonction exit, alors cette fonction est
       exécutée avant de décharger le module. L'argument  flags  est  utilisé  pour  modifier  le
       comportement  de  l'appel  système,  conformément  à  la description ci-dessous. Cet appel
       système nécessite des droits.

       La suppression de module est tentée d'après les règles suivantes.

       (1)  Si d'autres modules chargés dépendent de (c'est-à-dire font  référence  aux  symboles
            définis dans) ce module, alors l'appel échoue.

       (2)  Sinon, si le nombre de références pour ce module (c'est-à-dire le nombre de processus
            utilisant actuellement  ce  module)  est  nul,  alors  le  module  est  immédiatement
            déchargé.

       (3)  Si un module a un nombre de références non nul, alors le comportement dépend des bits
            définis dans flags. En utilisation normale (consultez NOTES),  l'attribut  O_NONBLOCK
            est toujours indiqué, et l'attribut O_TRUNC pourrait être aussi indiqué.

            Les diverses combinaisons de flags ont les effets suivants.

            flags == O_NONBLOCK
                   L'appel se termine immédiatement, avec une erreur.

            flags == (O_NONBLOCK | O_TRUNC)
                   Le module est déchargé immédiatement, quelque soit le nombre de références.

            (flags & O_NONBLOCK) == 0
                   Si flags n'indique pas O_NONBLOCK, les étapes suivantes se succèdent :

                   -  le  module  est  marqué  de  telle sorte qu'aucune nouvelle référence n'est
                      permise ;

                   -  si le nombre de références du module est non nul, l'appelant est  placé  en
                      état  de sommeil non interruptible (TASK_UNINTERRUPTIBLE) jusqu'à ce que le
                      nombre de références soit nul, à ce moment l'appel est débloqué ;

                   -  le module est déchargé normalement

       L'attribut O_TRUNC a un effet supplémentaire sur les  règles  décrites  précédemment.  Par
       défaut,  si  un module a une fonction init mais pas de fonction exit, essayer de supprimer
       ce module échouera. Cependant, si O_TRUNC a été indiqué, cette condition est contournée.

       Utiliser l'attribut O_TRUNC est  dangereux.  Si  le  noyau  n'a  pas  été  construit  avec
       CONFIG_MODULE_FORCE_UNLOAD,   cet   attribut   est  ignoré  silencieusement  (normalement,
       CONFIG_MODULE_FORCE_UNLOAD  est  activé).  Utiliser  cet  attribut   corrompt   le   noyau
       (TAINT_FORCED_RMMOD).

VALEUR RENVOYÉE

       En  cas  de  succès,  0 est renvoyé. en cas d'échec, -1 est renvoyé et errno se positionné
       pour indiquer l'erreur.

ERREURS

       EBUSY  Le  module  n'est  pas  « actif »  (c'est-à-dire  qu'il   est   encore   en   cours
              d'initialisation  ou  déjà marqué pour la suppression), ou le module a une fonction
              init mais pas de fonction exit, et O_TRUNC n'a pas été indiqué dans flags.

       EFAULT name fait référence à un emplacement en dehors de l'espace  d'adressage  accessible
              du processus.

       ENOENT Il n'existe aucun module de ce nom.

       EPERM  L'appelant  n'avait  pas les droits (n'avait pas la capacité CAP_SYS_MODULE), ou le
              déchargement de module est désactivé  (consultez  /proc/sys/kernel/modules_disabled
              dans proc(5)).

       EWOULDBLOCK
              D'autres  modules  dépendent  de ce module, ou O_NONBLOCK a été indiqué dans flags,
              mais le nombre de références est non nul et O_TRUNC n'a pas été indiqué dans flags.

STANDARDS

       Linux.

HISTORIQUE

       L'appel système delete_module() n'est pas pris en  charge  par  la  glibc.  Il  n'est  pas
       déclaré  dans les en-têtes de la glibc mais, par un caprice de l'histoire, les versions de
       la glibc antérieures à la glibc 2.23 fournissaient une interface binaire  pour  cet  appel
       système.  Ainsi,  il  suffisait, avant la glibc 2.23, de déclarer manuellement l'interface
       dans votre code pour  utiliser  cet  appel  système.  Sinon,  vous  pouvez  l'invoquer  en
       utilisant syscall(2).

   Linux 2.4 et antérieurs
       Dans Linux 2.4 et antérieurs, l'appel système ne prend qu'un argument :

        int delete_module(const char *name);

       Si  name  est  NULL, tous les modules non utilisés marqués à nettoyer automatiquement sont
       supprimés.

       De plus amples précisions sur les différences  de  comportement  de  delete_module()  dans
       Linux 2.4 et antérieurs ne sont pas actuellement expliquées dans cette page de manuel.

NOTES

       Le  sommeil  non  interruptible  qui  peut  arriver  si  O_NONBLOCK  est omis de flags est
       considéré indésirable, parce que le processus dormant est laissé dans un état non  tuable.
       Avec  Linux 3.7, indiquer O_NONBLOCK est facultatif, mais à l'avenir, ce sera probablement
       obligatoire.

VOIR AUSSI

       create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)

TRADUCTION

       La traduction française de cette  page  de  manuel  a  été  créée  par  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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 à ⟨debian-l10n-french@lists.debian.org⟩.