opendir関数とreaddir関数の内包と用法

2183 ワード

opendir関数
ヘッダファイル:萼include #include
関数:DIR*opendir;
意味: opendir()はパラメータnameで指定されたディレクトリを開いてDIR*に戻るディレクトリストリームとopen()が同じです.次にディレクトリの読み込みと検索にはこの戻り値を使います.
DIRについて: 詳細:http://blog.csdn.net/u012349696/article/details/50083787
まずDIRという構造体について説明します.以下はDIR構造体の定義です.
struct __dirstream      {       void *__fd;         char *__ダタ         要点 __entry udca         char *__ptr;         要点 __ntry up tr;         sizaut __allocation;         sizaut __size;         __libccultockfine (、 __ロック        };       typedef struct __dirstream DIR;    
DIR構造体はFILEに似ています.これは内部構造です.以下のいくつかの関数はこの内部構造で現在読み込まれているディレクトリに関する情報を保存します.すなわち、ファイルディレクトリを開くと、DIR構造体を指すポインタが返されます.このポインタは以下の関数で使用されます.
struct dirent *readdir(DIR) *dp);      void rewindadir(DIR) *dp);      要点 closedir(DIR) *dp);      long telldir(DIR) *dp);      void seekdir(DIR) *dp、long loc)    
DIR構造については、これだけ知っています.彼の構造メンバーを研究する必要はありません.

readdir関数
頭文書:萼include
関数:struct dirent*readdir(DIR*dir);
意味:readdir()はパラメータdirディレクトリストリームの次のディレクトリエントリポイントに戻る.
struct dirent{    inouut duino//duuinoこのディレクトリはポイントのinodeに入ります.    フュージョンduff;//duffディレクトリファイルの先頭からここまでのディレクトリのエントリポイントのシフト    シンプルショットint durclen//durclen nameの長さは、NULL文字を含みません.    unsigned char dype//dype dunameというファイルタイプのファイル名です.    ハーレード[256];
クローズド関数 
頭文書:萼include
関数;closedir(DIR*dir)
意味:dirストリームを閉じます.
lsコマンド作成練習
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void do_ls(char *);

int main(int ac,char *av[])
{
  	if(ac == 1)
		do_ls(".");//      
	else
	{
		while(ac--)
		{
			printf("%s:
",*++av); do_ls(*av); } } } void do_ls(char dirname[]) { DIR *dir_ptr; struct dirent *direntp; dir_ptr = opendir(dirname);
	if(dir_ptr == NULL)
	{
		fprintf(stderr,"Ls: can not open %s",dirname);
	}
	else 
	{
	   	direntp = readdir(dir_ptr);
		while(direntp == NULL)
		{
			printf("%s
",direntp->d_name); } closedir(dir_ptr); } }