24

C言語の規則では、配列インデックスは0からカウントされます。iノード番号が0ではなく1から始まるのはなぜですか。

iノード0が特別な用途のために予約されている場合、iノード0の重要性は何ですか?

4

4 に答える 4

33

0は、nullまたはiノードがないことを示す番兵値として使用されます。センチネルがないCでポインタをNULLにする方法と同様に、構造体のiノードが設定されているかどうかをテストするために追加のビットが必要になります。

詳細はこちら:

すべてのブロックおよびiノードアドレスは1から始まります。ディスク上の最初のブロックはブロック1です。0はブロックがないことを示すために使用されます。(スパースファイルにはこれらを含めることができます)

http://uranus.chrysocome.net/explore2fs/es2fs.htm

たとえば、ディレクトリがファイルエントリの固定配列として表されていた古いファイルシステムでは、ファイルを削除すると、そのエントリのiノード値が0に設定されます。ディレクトリをトラバースするときに、iノードが0のエントリはすべて無視されます。

于 2010-01-20T05:02:31.717 に答える
31

通常、戻り値0は通常エラーを通知するため、iノード0は予約されています。Linuxカーネルの複数のメソッド(特にすべてのファイルシステムで共有されるVFSレイヤー)は、find_inode_numberなどのino_tを返します

より多くの予約されたiノード番号があります。たとえば、ext2の場合:

#define EXT2_BAD_INO             1      /* Bad blocks inode */
#define EXT2_ROOT_INO            2      /* Root inode */
#define EXT2_BOOT_LOADER_INO     5      /* Boot loader inode */
#define EXT2_UNDEL_DIR_INO       6      /* Undelete directory inode */

そしてext3には:

#define EXT3_BAD_INO             1      /* Bad blocks inode */
#define EXT3_ROOT_INO            2      /* Root inode */
#define EXT3_BOOT_LOADER_INO     5      /* Boot loader inode */
#define EXT3_UNDEL_DIR_INO       6      /* Undelete directory inode */
#define EXT3_RESIZE_INO          7      /* Reserved group descriptors inode */
#define EXT3_JOURNAL_INO         8      /* Journal inode */

そしてext4には:

#define EXT4_BAD_INO             1      /* Bad blocks inode */
#define EXT4_ROOT_INO            2      /* Root inode */
#define EXT4_USR_QUOTA_INO       3      /* User quota inode */
#define EXT4_GRP_QUOTA_INO       4      /* Group quota inode */
#define EXT4_BOOT_LOADER_INO     5      /* Boot loader inode */
#define EXT4_UNDEL_DIR_INO       6      /* Undelete directory inode */
#define EXT4_RESIZE_INO          7      /* Reserved group descriptors inode */
#define EXT4_JOURNAL_INO         8      /* Journal inode */

他のファイルシステムでは、ino1をルートiノード番号として使用します。一般に、ファイルシステムは、iノード番号と予約済みのino値(0を除く)を自由に選択できます。

于 2010-01-21T13:08:24.577 に答える
5

OSXは、iノード0がまだ削除されていない削除済みファイルを意味することを指定しています。OSXはBSDから派生しているため、これは他のファイルシステムでも使用されている可能性がありますが、少なくともNetBSDではこの使用法が削除されているようです。

getdirentriesについてはOSXのマンページを参照してくださいhttp://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man2/getdirentries.2.html

于 2013-06-15T18:26:42.067 に答える
0

.badblocks何年も前にファイルシステムを作成したとき、疑似ファイルにiノード0を使用しました。

一部のファイルシステム.badblocksでは、実際にはルートとモード0が所有する通常のファイルとしてルートディレクトリに存在します。ルートはファイルを開くことができますが、読み取りまたは書き込みは未定義です。

iノードは1から始まり、#1は、、.badblocks#2はルートディレクトリであるという古代の伝統があります。特に十分に保証されて.badblocksいるわけではありませんが、多くのファイルシステムはルート#2を作成するために邪魔になりません。

于 2010-07-29T17:53:27.367 に答える