2012-03-02 8 views
3

私はlinux(特にdebian)にディレクトリの内部表現を示す小さなプログラムを書こうとしています。このアイデアはopen( "。"、O_RDONLY)を使った小さなCプログラムでしたが、これは出力がないようです。Cでディレクトリファイルを読む

#include <stdio.h> 
#include <fcntl.h> 

int main(int argc, char** argv) 
{ 
     int fd = open(argv[1],O_RDONLY,0); 
     char buf; 

     printf("%i\n",fd); 

     while(read(fd, &buf, 1) > 0) 

       printf("%x ", buf); 


     putchar('\n'); 
} 

通常のファイルで実行すると、予想どおり動作しますが、 "。"などのディレクトリでは出力されません。 fdの値は3(期待通り)ですが、readの呼び出しは-1を返します。

なぜこれが機能しないのですか?内部表現を読み取るにはどうすればよいですか?

ありがとうございます!

+0

私がいることを信じていますあなたのコード(またはそれと同等のもの)は、実装固有の方法で、(おそらく1980年代または1970年代に)長年前に働いていたかもしれません。 –

答えて

7

ディレクトリを処理するには、opendir/readdir/closedirを使用する必要があります。より詳しい情報は、対応するマニュアルページを参照してください。

ファイル名がディレクトリに対応するかどうかを確認するには、まずファイル名にstatを呼び出して、ディレクトリ(S_ISDIR(myStatStruc.st_mode))かどうかを確認する必要があります。

+2

最低レベルのシステムコールはhttp://linux.die.net/man/2/getdents –

+0

です。@Basile Starynkevitch:そうですが、移植性がありません。対照的に、私が引用した関数はPOSIXです。 – DarkDust

2

ディレクトリはファイルシステム固有の表現であり、ファイルシステムの一部です。 extfsでは、データブロック(上記のコードを使用して読み込んだファイル)とは異なり、文字列とiノードのペアのテーブルです。

Cのディレクトリ固有情報を読み取るには、dirent.hを使用する必要があります。 POSIXシステムでより多くの情報 http://pubs.opengroup.org/onlinepubs/7908799/xsh/dirent.h.html

このページでは 見て、システムコール「STAT」はあなたのファイルシステム上のiノードに関するすべての情報与えるだろう(ファイル/ディレクトリは/ etc。)を