答え1
いいえ、名前ではなくinodeでディレクトリやファイルを開くUnixシステムコールはありません。ディレクトリエントリリスト内のディレクトリエントリの位置に関する概念も存在しない。
これが欲しいと思ったら、おそらくデザインプロセスの早い段階で間違った方向に進んでいます。
という名前のディレクトリが2つある場合、a
どのディレクトリを参照しますか?a/file
ディレクトリエントリは、名前からinodeへの順序なしマッピングです。、名前をキーとして使用します。重複キーはサポートされておらず、生成できません。既存の名前を使用して操作を実行しようとすると、既存のディレクトリエントリのみが参照されます。
ディスクのデータ構造(またはカーネルのバグまたはハードウェアのバグ)を手動で編集すると、同じ名前のディレクトリが2回作成される可能性があります(他のinodeを指すこともあります)、確認する必要がありますfsck
!
あなたが実行しているとしましょうcat /home/peter/foo.txt
。 catはディレクトリをまったく読みませんopen("/home/peter/foo.txt", O_RDONLY) = -1 ENOENT (No such file or directory)
。strace cat foo.txt
たぶんあなたは利用可能ですヒューズファイル名の特殊文字を奇妙な方法で解釈し、ディレクトリエントリを意味のある順序で返す「ファイルシステム」を提供します。ファイル名に表示される文字の制限に同意すると、特定の文字に特別な意味を与えることができます。したがって、/mnt/database-fuse-mount/some_dir/{2}
2番目のディレクトリエントリを参照できます。または、.../name{2}
という2番目の項目を参照することもできますname
。データベーステーブルを各レコードのファイルとともにディレクトリにマウントするFUSEモジュールがない場合、誰もこれを実装しないと予想されます。ファイル名を主キーとして使用しますか? IDK、SQLデータベースはそのフィールドで照会できるため、これは実際には意味がありません。
答え2
ディスク上のファイルシステムではありませんが、すべてのデータベースはデフォルトで必要な操作を実行します。これはファイルマネージャにディレクトリとファイルのセットとして表示されない抽象化レイヤですが、実際には必要に応じてデフォルトのファイルマネージャを直接作成できます。
データベースを使用すると、キー値を使用して「場所」を区別でき、名前フィールドを必要なだけ繰り返すことができ、テーブル内の一致するフィールドの組み合わせを見つけるクエリを介してデータにアクセスできます。