私の質問は、Linuxでデバイスノードを実装する方法に関連しています。私はudevやdevtmpfsなどの利用可能な擬似ファイルシステムがあることを知っています。この場合、その背後には実際のリポジトリがなく、ファイルシステムはカーネルドライバがアプリケーションに提供する幻想です。しかし、私の質問はまだ有効です。
- devtmpfs または udev を使用すると、/dev がユーザー空間に表示される方法です。
- これは、/ devが手動で作成されたデバイスノードを含む一般的なディレクトリの場合です。
問題は次のとおりです。
- デバイスノードファイルはファイルシステムに保存されていますか(inodeを使用)、それともディレクトリ内の特別なエントリですか?
- ファイルとして保存されると、バイナリファイルとどのように区別されますか?デバイスノードには特別なマジックナンバーが割り当てられていますか?
答え1
POSIX モデルでは、すべてのファイルがタイプに関係なく inode を使用します。ディレクトリエントリは単にinodeを指す名前です。ファイルタイプ、権限などはすべてinodeに保存されます。したがって、デバイスノードにはinodeも含まれます。以下を実行してこれを確認できます
ls -li /dev
。各項目には対応する inode 番号があります。デバイスノードは、inode に保存されているファイルタイプによって、他のファイルタイプと区別されます。これはファイルパターンの一部です。さまざまなファイル形式(参照UNIXの権限とファイルタイプの理解)にはこれに関連する「魔法の」数字があります。