NOM¶
delete_module - Décharger un module de noyau
SYNOPSIS¶
int delete_module(const char *name, int flags);
Remarque : il n'existe pas de fonction glibc autour de cet appel
système ; consultez
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,
essayer de supprimer un module qui a une fonction
init mais pas de
fonction
exit échoue. 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.
delete_module() est spécifique à Linux.
NOTES¶
La glibc ne fournit pas de fonction autour de cet appel système ;
utilisez
syscall(2) pour l'appeler.
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.44 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 à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».