web-dev-qa-db-ja.com

「mknod」の反対は何ですか?

カーネルモジュールプログラミングガイド からキャラクターデバイスドライバーを書くことを学び、mknodを使用して_/dev_にノードを作成し、ドライバーと通信します。

ただし、マンページを確認し、rmnodが存在しないコマンドであることを確認した後、削除する明白な方法を見つけることができません。

mknodの効果を逆転させ、_/dev_で作成されたノードを安全に削除する正しい方法は何ですか?

35
merlin2011

正しいコマンドはrmです:)

mknodによって作成されたデバイスノードは、デバイスのメジャー番号とマイナー番号を含む単なるファイルです。そのファイルに初めてアクセスすると、Linuxはそのメジャー/マイナーをアドバタイズするドライバーを探してロードします。ドライバーは、そのファイルですべてのI/Oを処理します。

デバイスノードを削除すると、通常のUn * xファイルの動作が適用されます。ファイルへの参照がなくなるまでLinuxは待機し、その後ディスクから削除されます。

ドライバーはこれに気づきません。 Linuxはモジュールを自動的にアンロードしません。ドライバーは、何に対してもリクエストを受信しなくなります。ただし、誰かがデバイスノードを再作成する場合は準備ができています。

37
1000 Bites

おそらくコマンドではなく関数を探しているでしょう。 unlink()が答えです。プロセスがファイルを開いていない場合、unlink()はファイル/特殊ファイルを削除します。プロセスがファイルを開いている場合、ファイルはそれを参照する最後のファイル記述子が閉じられるまで残ります。詳細はこちら: http://man7.org/linux/man-pages/man2/unlink.2.html

1