どのように私はUnixのファイルとしてディレクトリを読んでいますか?

StackOverflow https://stackoverflow.com/questions/1659071

  •  11-09-2019
  •  | 
  •  

質問

私は、ディレクトリ内のファイルは、のiノード番号と名前が含まれているUNIXで単にファイルであることを理解しています。どのように私はこれを見てみましょうか?私は、ディレクトリ上の猫以下を使用することはできません、およびVIの開口部には、ちょうど私のファイルのリスト...ないinode番号を示しています。

役に立ちましたか?

解決

これはプログラミングの質問ですので

(それ のあるプログラミングの質問、それはないですか?)、あなたはopendirreaddirclosedir機能をチェックアウトする必要があります。これらは、単一のUNIX仕様の一部です。

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

dirent.hファイルには、少なくともを含む、必要な構造を持っている必要があります

char   d_name[]    name of entry
ino_t  d_ino       file serial number

ここreaddirのマン用を参照してください - それはへのリンクが含まれています他ます。

そのためのディレクトリエントリに保存されたファイルに関する情報の量が最小であることに留意してください。 iノード自体は、実際のファイルの内容にすべての重要な指針と一緒に、その上の時間、サイズ、所有者、アクセス権などの事をあなたはstat関数から取得するものが含まれています。

他のヒント

昔は - バージョン7、システムIII、初期のシステムV - 特に2バイトのinode番号を持つ古いUNIXのファイルシステムと14バイトの制限のために、あなたは確かにディレクトリを開くことができてメモリに内容を読みますファイル名でます。

より多くのエキゾチックなファイルシステムは、()、readdir関数()はopendir、より一般的になったので、

、closedirの()関数呼び出しの家族は、ディレクトリの内容を解析することは、ますます非自明となりましたので、代わりに使用する必要がありました。

最後に、最後の十年かそこらで、それはほとんどのシステムで、ディレクトリを読み取ることができない点に達しています。 (例えばfchdirに(などの操作)が動作することができ、主に)あなたがそれを開くことができ、あなたはそれを読むために呼び出しののopendir()ファミリを使用することができます。

scroll top