1つのファイルのハードリンクの数に制限はありますか?どこに指定されていますか? Linuxの安全な制限は何ですか?そして、他のPOSIXシステムはどうですか?
Posixでは、オペレーティングシステムがハードリンクの概念を理解している必要がありますが、ハードリンクを実際に特定の状況で使用できるわけではありません。 pathconf(filename, _PC_LINK_MAX)
を呼び出すと、特定の場所で許可されているハードリンクの数(ファイルシステムのタイプによって異なる場合があります)を確認できます。 最小制限 (__POSIX_LINK_MAX
_)は8ですが、これは link()
が他の多くのエラーを報告する可能性があるため、あまり意味がありません(権限が拒否されました。ディスクがいっぱいです...)。
stat
構造体は、リンクカウントをタイプ _nlink_t
_ のフィールドに格納するため、このフィールドのタイプによってシステムの上限が決まります。しかし、そこまで到達できない可能性は十分にあります。32ビットの_nlink_t
_が一般的ですが、多くのファイルシステムでは16ビットしかありません(Linuxソースの簡単なgrepは、ext [234]を示しています。 、NTFS、UFS、およびXFSは、カーネルデータ構造で16ビットリンクカウントを使用します。
Linuxカーネルソース(* include/linux/ext3_fs.h *)のext3 inode構造のディスク形式を見て、リンク数が16ビット数であるとカウントしている
struct ext3_inode {
... snip ...
__le16 i_links_count; /* Links count */
}
これは、ext3ファイルシステムが最大65535のリンクを持つことができることを意味すると思います。
他のファイルシステムの値を確認していません。