まず、複数のハード リンクを使用してプログラムファイルとデータファイルを異なる方法で処理するのはなぜですか?
次に、重要なのは名前や番号ではなく (ハード リンクがファイルに別の名前を追加することに注意してください)、inodeです。複数のハード リンクを持つ「ファイル」(つまり i ノード) の場合、同じ i ノードを指すすべての名前は同じ権利を持ちます (「メイン」名はなく、同じ i ノードを指すすべての名前は同等です)。
したがって、stat(2)st_dev
システムコールを呼び出した後、とフィールドの両方を使用する必要がありst_ino
ます。これらは一緒になって、ファイル、つまりその i ノードを一意に識別します。
したがって、ファイルのst.st_nlink>1
場合、おそらく ( st_dev
, st_ino
) ペアをハッシュテーブルまたはセット コンテナーに追加します。
C++ ではおそらく一部でも使用できますがstd::set<std::pair<dev_t,ino_t> >
、C ではそのようなコンテナーを作成する必要があります。
注意: ファイル (たとえば、一部の inode) は名前がゼロの場合もあります (たとえば、 のunlink(2)
後にシステムコールが呼び出された場合open(2)
)。これが一時ファイルの作成方法です。