1

ディレクトリは、UNIX内のファイルのiノード番号と名前を含む単なるファイルであることを理解しています。これをどのように確認しますか?ディレクトリでcat以下を使用することはできません。viで開くと、ファイルのリストが表示されます...iノード番号は表示されません。

4

3 に答える 3

8

これはプログラミングの質問なので (プログラミングの質問ですよね?)、opendirreaddirおよび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、実際のファイル コンテンツへの非常に重要なポインタと共に、関数から取得したもの (時間、サイズ、所有者、権限など) が含まれています。

于 2009-11-02T01:59:35.163 に答える
6

昔 - バージョン 7、システム III、初期のシステム V - 特に 2 バイトの inode 番号とファイルの制限が 14 バイトの古い Unix ファイル システムの場合、実際にディレクトリを開いてその内容をメモリに読み込むことができました。名前。

風変わりなファイル システムが普及するにつれて、代わりに opendir()、readdir()、closedir() ファミリの関数呼び出しを使用する必要がありました。これは、ディレクトリの内容の解析がますます重要になったためです。

最後に、過去 10 年ほどの間に、ほとんどのシステムでディレクトリを読み取ることができないところまで来ました。それを開くことができ (主に fchdir() などの操作が機能するようにするため)、opendir() ファミリーの呼び出しを使用してそれを読み取ることができます。

于 2009-11-02T02:05:06.680 に答える
1

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
于 2009-11-02T01:46:36.550 に答える