名 前
delete_module − カ ー ネ ル モ ジ ュ ー ル を ア ン ロ ー ド す る
書 式
int delete_module(const char *name, int flags); 注 意 : こ の 関 数 の 宣 言 は glibc の ヘ ッ ダ ー で は 提 供 さ れ て い な い 。 「 注 意 」 を 参 照 。
説 明
delete_module() シ ス テ ム コ ー ル は 、 name で 特 定 さ れ る 未 使 用 の ロ ー ド 可 能 な モ ジ ュ ー ル の エ ン ト リ ー を 削 除 し よ う と す る 。 モ ジ ュ ー ル に exit 関 数 が あ る 場 合 、 モ ジ ュ ー ル を ア ン ロ ー ド す る 前 に こ の 関 数 が 実 行 さ れ る 。 flags 引 き 数 は 、 以 下 で 説 明 す る よ う に シ ス テ ム コ ー ル の 動 作 を 変 更 す る の に 使 用 さ れ る 。 こ の シ ス テ ム コ ー ル に は 特 権 が 必 要 で あ る 。 モ ジ ュ ー ル の 削 除 は 以 下 の ル ー ル に し た が っ て 行 わ れ る 。
1. こ の モ ジ ュ ー ル に 依 存 し て い る |
(こ の モ ジ ュ ー ル で 定 義 さ れ て い る シ ン ボ |
ル を 参 照 し て い る ) モ ジ ュ ー ル が ロ ー ド さ れ て い る 場 合 、 こ の 呼 び 出 し は 失 敗 す る 。
2. そ れ 以 外 の 場 合 で 、 モ ジ ュ ー ル の 参 照 カ ウ ン ト |
(こ の モ ジ ュ ー ル を 現 在 使 |
用 し て い る プ ロ セ ス 数 ) が 0 で あ れ ば 、 モ ジ ュ ー ル は 直 ち に ア ン ロ ー ド さ れ る 。
3. モ ジ ュ ー ル の 参 照 カ ウ ン ト が |
0 で な い 場 合 、 そ の 動 作 は flags に セ ッ ト |
さ れ た ビ ッ ト に よ っ て 決 ま る 。 通 常 の 使 用 時 は (「 注 意 」 参 照 )、 O_NONBLOCK は 常 に 指 定 さ れ 、 O_TRUNC フ ラ グ が 追 加 で 指 定 さ れ る こ と が あ る 。
flags
の 組 み 合 わ せ
が 持 つ 効 果 は
以 下 の と お り
で あ る 。
flags == O_NONBLOCK エ ラ ー の
場 合 、 呼 び 出
し は 直 ち に 返
る 。
flags == (O_NONBLOCK | O_TRUNC) 参 照
カ ウ ン ト が 0 以
外 か ど う か に
関 わ ら ず 、 直
ち に モ ジ ュ ー
ル を ア ン ロ ー
ド す る 。
(flags & O_NONBLOCK) == 0
flags に O_NONBLOCK が 指 定 さ れ な か っ た 場 合 、 以 下 の ス テ ッ プ で 処 理 が 行 わ れ る 。
* 新 し い 参 照 を 許 可 し な い よ う に 、 指 定 さ れ た モ ジ ュ ー ル に マ ー ク を 付 け る 。 | |
* モ ジ ュ ー ル の 参 照 カ ウ ン ト が |
0 で な い 場 合 、 参 照 カ ウ ン ト が 0 に な る ま で 、 呼 び 出 し 元 は 割 り 込 み 不 可 の ス リ ー プ 状 態 (TASK_UNINTERRUPTIBLE) に 置 か れ る 。 参 照 カ ウ ン ト が 0 に な っ た 時 点 で 、 呼 び 出 し 元 の 停 止 が 解 除 さ れ る 。
* モ ジ ュ ー ル は 通 常 通 り の 方 法 で ア ン ロ ー ド さ れ る 。 |
O_TRUNC フ ラ グ に は 上 記 の ル ー ル に 加 え て も う 一 つ の 効 果 が あ る 。 デ フ ォ ル ト で は 、 モ ジ ュ ー ル に init 関 数 が あ る が exit 関 数 が な い 場 合 、 そ の モ ジ ュ ー ル を 削 除 し よ う と す る と 失 敗 す る 。 し か し 、 O_TRUNC が 指 定 さ れ た 場 合 、 こ の 要 件 は ス キ ッ プ さ れ る 。
O_TRUNC フ ラ グ の 使 用 は 危 険 で あ る ! カ ー ネ ル が CONFIG_MODULE_FORCE_UNLOAD で 作 成 さ れ て い な い 場 合 、 こ の フ ラ グ は 黙 っ て 無 視 さ れ る (通 常 は CONFIG_MODULE_FORCE_UNLOAD は 有 効 に な っ て い る )。 こ の フ ラ グ を 使 う と カ ー ネ ル に ゴ ミ が 残 る こ と に な る (TAINT_FORCED_RMMOD)。
返 り 値
成 功 の 場 合 0 が 返 さ れ る 。 エ ラ ー の 場 合 −1 が 返 さ れ 、 errno に 適 切 な 値 が 設 定 さ れ る 。
エ ラ ー
EBUSY モ ジ ュ ー ル は |
"live" で は な い (モ ジ ュ ー ル が ま だ 初 期 化 中 か 、 す で に |
削 除 の マ ー ク が 付 け ら れ て い る )。 モ ジ ュ ー ル に init 関 数 が あ る が exit 関 数 が な く 、 flags に O_TRUNC が 指 定 さ れ て い な か っ た 。
EFAULT |
name が プ ロ セ ス が ア ク セ ス で き る ア ド レ ス 空 間 外 の 場 所 を 参 照 し て い る 。 | ||
ENOENT |
そ の 名 前 の モ ジ ュ ー ル が 存 在 し な い 。
EPERM 呼 び 出 し 元 が 特 権 |
(CAP_SYS_MODULE ケ ー パ ビ リ テ ィ ) を 持 っ て い な |
か っ た 。 ま た は 、 モ ジ ュ ー ル の ア ン ロ ー ド が 無 効 に な っ て い る (proc(5) の /proc/sys/kernel/modules_disabled を 参 照 )。
EWOULDBLOCK 他 の モ ジ ュ ー ル が こ の モ ジ ュ ー ル に 依 存 し て い る 。 ま た は 、 flags に O_NONBLOCK が 指 定 さ れ た が 、 こ の モ ジ ュ ー ル の 参 照 カ ウ ン ト が 0 以 外 で flags に O_TRUNC が 指 定 さ れ て い な か っ た 。
準 拠
delete_module() は Linux 固 有 で あ る 。
注 意
delete_module() シ ス テ ム コ ー ル は glibc で は サ ポ ー ト さ れ て い な い 。 glibc ヘ ッ ダ ー で は 宣 言 は 提 供 さ れ て い な い が 、 歴 史 の 紆 余 曲 折 を 経 て glibc は こ の シ ス テ ム コ ー ル に 対 す る ABI を 公 開 し て い な い 。 し た が っ て 、 こ の シ ス テ ム コ ー ル を 利 用 す る に は 、 自 分 の コ ー ド の 中 で 手 動 で イ ン タ ー フ ェ ー ス を 宣 言 す れ ば よ い 。 syscall(2) を 使 っ て シ ス テ ム コ ー ル を 起 動 で き る 。
flags に O_NONBLOCK が 指 定 さ れ て い な い 場 合 に 起 こ る 可 能 性 が あ る 割 り 込 み 不 可 の ス リ ー プ は 望 ま し く な い と 考 え ら れ て い る 。 な ぜ な ら 、 ス リ ー プ し て い る プ ロ セ ス は kill で き な い 状 態 (unkillable state) の ま ま に な る か ら で あ る 。 Linux 3.7 時 点 で は 、 O_NONBLOCK の 指 定 は 省 略 可 能 だ が 、 将 来 の カ ー ネ ル で は 必 須 に な る だ ろ う 。
Linux 2.4
以 前
Linux 2.4 以 前 で は 、
こ の シ ス テ ム
コ ー ル の 引 き
数 は 1 つ だ け で
あ っ た 。
int delete_module(const char *name);
name が NULL の 場 合 、 auto−clean の マ ー ク が つ い た す べ て の 未 使 用 の モ ジ ュ ー ル が 削 除 さ れ る 。
Linux 2.4 以 前 の delete_module() の 動 作 の よ り 詳 細 な 違 い は 、 現 在 の と こ ろ こ の マ ニ ュ ア ル ペ ー ジ で は 説 明 し な い 。
関 連 項 目
create_module(2), init_module(2), query_module(2), lsmod(8), modprobe(8), rmmod(8)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。