ディレクトリは、UNIX内のファイルのiノード番号と名前を含む単なるファイルであることを理解しています。これをどのように確認しますか?ディレクトリでcat以下を使用することはできません。viで開くと、ファイルのリストが表示されます...iノード番号は表示されません。
3 に答える
これはプログラミングの質問なので (プログラミングの質問ですよね?)、opendir
、readdir
およびclosedir
関数を確認する必要があります。これらは、Single UNIX Spec の一部です。
#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
ページへのリンクが含まれています。
ディレクトリエントリに格納されているファイルに関する情報の量は最小限であることに注意してください。inode 自体にはstat
、実際のファイル コンテンツへの非常に重要なポインタと共に、関数から取得したもの (時間、サイズ、所有者、権限など) が含まれています。
昔 - バージョン 7、システム III、初期のシステム V - 特に 2 バイトの inode 番号とファイルの制限が 14 バイトの古い Unix ファイル システムの場合、実際にディレクトリを開いてその内容をメモリに読み込むことができました。名前。
風変わりなファイル システムが普及するにつれて、代わりに opendir()、readdir()、closedir() ファミリの関数呼び出しを使用する必要がありました。これは、ディレクトリの内容の解析がますます重要になったためです。
最後に、過去 10 年ほどの間に、ほとんどのシステムでディレクトリを読み取ることができないところまで来ました。それを開くことができ (主に 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