dwww Home | Manual pages | Find package

delete_module(2)              System Calls Manual             delete_module(2)

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  mo-
       dule  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 comporte-
            ment  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'ap-
                      pelant  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é si-
       lencieusement  (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é in-
              diqué  dans  flags,  mais le nombre de références est non nul et
              O_TRUNC n'a pas été indiqué dans flags.

STANDARDS
       delete_module() est spécifique à Linux.

NOTES
       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).

       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.

   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 au-
       tomatiquement sont supprimés.

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

VOIR AUSSI
       create_module(2),  init_module(2),  query_module(2),   lsmod(8),   mod-
       probe(8), rmmod(8)

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.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.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.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⟩.

Pages du manuel de Linux 6.03   5 février 2023                delete_module(2)

Generated by dwww version 1.15 on Sat Jun 29 01:42:56 CEST 2024.