DELETE_MODULE(2) | Руководство программиста Linux | DELETE_MODULE(2) |
delete_module - выгружает модуль ядра
int delete_module(const char *name, int flags);
Замечание: В заголовочных файлах glibc этой системный вызов отсутствует; смотрите ЗАМЕЧАНИЯ.
Вызов delete_module() пытается удалить неиспользуемый загруженный модуль с именем name. Если у модуля есть функция exit, то она выполняется перед выгрузкой. Аргумент flags используется для изменения поведения системного вызова — это описано далее. Данный системный вызов требует особых прав.
Удаление модуля выполняется по следующим правилам:
Флаг O_TRUNC имеет ещё один эффект на правила, описанные выше. По умолчанию, если модуль имеет функцию init, но не имеет функции exit, то попытка удаления модуля завершается с ошибкой. Однако, если указан O_TRUNC, то это требование не учитывается.
Использовать флаг O_TRUNC опасно! Если ядро не собрано с параметром CONFIG_MODULE_FORCE_UNLOAD, то этот флаг просто игнорируется (обычно параметр CONFIG_MODULE_FORCE_UNLOAD включают). Использование этого флага приводит к примешиванию (taints) в ядре (TAINT_FORCED_RMMOD).
При успешном выполнении возвращается ноль. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
Вызов delete_module() есть только в Linux.
Системный вызов delete_module() не поддерживается glibc. В заголовочных файлах glibc он не объявлен, но в недавнем прошлом glibc до версии 2.23 экспортировал ABI для этого системного вызова. Поэтому чтобы получить данный системный вызов достаточно вручную объявить интерфейс в своём коде; или же вы можете вызвать его через syscall(2).
Непрерываемый сон, который может начаться, если в flags не указан флаг O_NONBLOCK, считается нежелательным, так как спящий процесс находится в неубиваемом состоянии. В Linux 3.7 указание O_NONBLOCK необязательно, но в будущих ядрах, он, вероятно, станет обязательным.
В Linux версии 2.4 и более ранних системный вызов принимал один аргумент:
int delete_module(const char *name);
Если значение name равно NULL, то все неиспользуемые модули, помеченные для автоматической вычистки, удаляются.
Есть и некоторые другие отличия в поведении delete_module() в Linux 2.4 и более ранних, но они пока не описаны в этой справочной странице.
create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)
2017-09-15 | Linux |