DELETE_MODULE(2)

NOM
delete_module - Décharger un module de noyau

SYNOPSIS
int delete_module(const char *name, int flags);
Remarque : cette fonction n'est pas déclarée par les en-têtes de la glibc ; consultez le section NOTES.

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 essayé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 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églés 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
S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et définit errno en conséquence.

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.

CONFORMITÉ
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, la glibc fournit une interface binaire pour cet appel système. Ainsi, il suffit 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 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 actuellement pas expliquées dans cette page de manuel.

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

COLOPHON
Cette page fait partie de la publication 3.70 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Alain Portal <http://manpagesfr.free.fr/> (2006-2007).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».