delete_module(2) System Calls Manual delete_module(2) NOM delete_module - Decharger un module de noyau BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include /* Definition of O_* constants */ #include /* Definition of SYS_* constants */ #include int syscall(SYS_delete_module, const char *name, unsigned int flags); Note : la glibe ne fournit pas d'enveloppe autour de delete_module(), necessitant l'utilisation de syscall(2). DESCRIPTION L'appel systeme delete_module() essaye de supprimer une entree de module chargeable inutilisee identifiee par name. Si le module a une fonction exit, alors cette fonction est executee avant de decharger le module. L'argument flags est utilise pour modifier le comportement de l'appel systeme, conformement a la description ci-dessous. Cet appel systeme necessite des droits. La suppression de module est tentee d'apres les regles suivantes. (1) Si d'autres modules charges dependent de (c'est-a-dire font reference aux symboles definis dans) ce module, alors l'appel echoue. (2) Sinon, si le nombre de references pour ce module (c'est-a-dire le nombre de processus utilisant actuellement ce module) est nul, alors le module est immediatement decharge. (3) Si un module a un nombre de references non nul, alors le comportement depend des bits definis dans flags. En utilisation normale (consultez NOTES), l'attribut O_NONBLOCK est toujours indique, et l'attribut O_TRUNC pourrait etre aussi indique. Les diverses combinaisons de flags ont les effets suivants. flags == O_NONBLOCK L'appel se termine immediatement, avec une erreur. flags == (O_NONBLOCK | O_TRUNC) Le module est decharge immediatement, quelque soit le nombre de references. (flags & O_NONBLOCK) == 0 Si flags n'indique pas O_NONBLOCK, les etapes suivantes se succedent : - le module est marque de telle sorte qu'aucune nouvelle reference n'est permise ; - si le nombre de references du module est non nul, l'appelant est place en etat de sommeil non interruptible (TASK_UNINTERRUPTIBLE) jusqu'a ce que le nombre de references soit nul, a ce moment l'appel est debloque ; - le module est decharge normalement L'attribut O_TRUNC a un effet supplementaire sur les regles decrites precedemment. Par defaut, si un module a une fonction init mais pas de fonction exit, essayer de supprimer ce module echouera. Cependant, si O_TRUNC a ete indique, cette condition est contournee. Utiliser l'attribut O_TRUNC est dangereux. Si le noyau n'a pas ete construit avec CONFIG_MODULE_FORCE_UNLOAD, cet attribut est ignore silencieusement (normalement, CONFIG_MODULE_FORCE_UNLOAD est active). Utiliser cet attribut corrompt le noyau (TAINT_FORCED_RMMOD). VALEUR RENVOYEE En cas de succes, 0 est renvoye. en cas d'echec, -1 est renvoye et errno se positionne pour indiquer l'erreur. ERREURS EBUSY Le module n'est pas << actif >> (c'est-a-dire qu'il est encore en cours d'initialisation ou deja marque pour la suppression), ou le module a une fonction init mais pas de fonction exit, et O_TRUNC n'a pas ete indique dans flags. EFAULT name fait reference a 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 capacite CAP_SYS_MODULE), ou le dechargement de module est desactive (consultez /proc/sys/kernel/modules_disabled dans proc(5)). EWOULDBLOCK D'autres modules dependent de ce module, ou O_NONBLOCK a ete indique dans flags, mais le nombre de references est non nul et O_TRUNC n'a pas ete indique dans flags. STANDARDS Linux. HISTORIQUE L'appel systeme delete_module() n'est pas pris en charge par la glibc. Il n'est pas declare dans les en-tetes de la glibc mais, par un caprice de l'histoire, les versions de la glibc anterieures a la glibc 2.23 fournissaient une interface binaire pour cet appel systeme. Ainsi, il suffisait, avant la glibc 2.23, de declarer manuellement l'interface dans votre code pour utiliser cet appel systeme. Sinon, vous pouvez l'invoquer en utilisant syscall(2). Linux 2.4 et anterieurs Dans Linux 2.4 et anterieurs, l'appel systeme ne prend qu'un argument : int delete_module(const char *name); Si name est NULL, tous les modules non utilises marques a nettoyer automatiquement sont supprimes. De plus amples precisions sur les differences de comportement de delete_module() dans Linux 2.4 et anterieurs ne sont pas actuellement expliquees dans cette page de manuel. NOTES Le sommeil non interruptible qui peut arriver si O_NONBLOCK est omis de flags est considere indesirable, parce que le processus dormant est laisse dans un etat non tuable. Avec Linux 3.7, indiquer O_NONBLOCK est facultatif, mais a 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier et David Prevot Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 delete_module(2)