どのように私はUnixのファイルとしてディレクトリを読んでいますか?
質問
私は、ディレクトリ内のファイルは、のiノード番号と名前が含まれているUNIXで単にファイルであることを理解しています。どのように私はこれを見てみましょうか?私は、ディレクトリ上の猫以下を使用することはできません、およびVIの開口部には、ちょうど私のファイルのリスト...ないinode番号を示しています。
解決
(それ のあるプログラミングの質問、それはないですか?)、あなたはopendir
、readdir
とclosedir
機能をチェックアウトする必要があります。これらは、単一の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()ファミリを使用することができます。
これは stat
コマンド順序であるかもしれません。記事から:
stat /etc/passwd
File: `/etc/passwd'
Size: 2911 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 324438 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-08-11 05:24:17.000000000 -0400
Modify: 2008-08-03 05:11:05.000000000 -0400
Change: 2008-08-03 05:11:05.000000000 -0400