可能性の重複:
How to check whether two file names point to the same physical fileLinuxでは、2つのハードリンクが1つのファイルに接続されていますか?
2つのハードリンクは、LinuxでCから一つのファイルに接続している場合どのように知ることができます。
ありがとうございました。
可能性の重複:
How to check whether two file names point to the same physical fileLinuxでは、2つのハードリンクが1つのファイルに接続されていますか?
2つのハードリンクは、LinuxでCから一つのファイルに接続している場合どのように知ることができます。
ありがとうございました。
stat
またはfstat
を使用してください。それらが記入したstat
構造には、inode番号が含まれています。 2つが接続されている場合、st_ino
フィールドは同じ値にする必要があります。
iノード番号はデバイス固有のものであるため、デバイスID(st_dev
)も確認する必要があります。
stat()
またはfstat()
関数は、そのファイルへのハードリンクの数が記載されているst_nlink
フィールドを含む構造体を返します。ハードリンクは同じinodeを再利用する必要があるため、2つの異なるパスのinodeを比較することができると思います。
両方のパスにstat() or fstat()関数を使用します。返された構造体のst_devとst_inoの両方のフィールドが同一である場合、パスは同じファイルシステムオブジェクトを参照します。
EDIT:
注意あなたがst_devフィールドとst_inoのの両方をチェックする必要がありこと。さもなければ、ちょうど同じinode番号を持つ異なるファイルシステムの2つのファイルをマッチさせる危険性があります。あなたは2つのマウントポイントにstat
を実行した場合、これを見ることができる場合があります。
$ stat//boot | grep Device
Device: 903h/2307d Inode: 2 Links: 23
Device: 902h/2306d Inode: 2 Links: 3
あなたは出力に同じinode番号をはっきりと見ることができます。
また、それは、ファイルのための決定的なユニークなIDであるiノード番号を、一覧表示されます
$ ls -i
を使用することができます。
iノード番号は、1つのデバイスでのみ一意です。あなたはまた、@thkala – camh
@camhのおかげで概説されているデバイスをチェックする必要があります。 – terminus