| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[C ディレクトリの走査]]==directory 関連の関数は header file dirent.h で宣言されており、構造体DIRを使って操作するようになっている。この構造体へのpointer で宣言されており、構造体DI[[R]]を使って操作するようになっている。この構造体へのpointer は directory stream(DIR DI[[R]] *)と呼ばれ、file stream (FILE *)と同じようなはたらきをする。
===opendir===
#include <sys/types.h>
#include <dirent.h>
DIR DI[[R]] *opendir(const char *name);
*directory を open し、direcotry stream を確立する。
*失敗すると、null pointer を返す。
#include <sys/types.h>
#include <dirent.h>
DIR DI[[R]] *readdir(DIR DI[[R]] *dirp);
*dirp で指定された directory stream の中の次の directory entry を示す構造体へのpointer を返す。
*以後、呼び出されるたびに、次のdirectory entry を返す。
**ino_t d_ino fileのi-node
**char d_name[] fileの名前
*詳しい情報が必要な場合、[[C 低水準ファイルアクセス|stat] [stat]を呼び出す必要がある。
===telldir===
#include <sys/types.h>
#include <dirent.h>
long int telldir(DIR DI[[R]] *dirp);
*directory stream 中の現在の位置を記録している値を返す。
*この値を使ってseekdirを呼び出せば、directory の走査を現在位置に再設定できる。
#include <sys/types.h>
#include <dirent.h>
void seekdir(DIR DI[[R]] *dirp, long int loc);
*dirpで指定されたdirectory stream 中のdirectory entry pointer を設定。
*位置の指定に使うlocの値は、事前にtelldirで取得しておく。
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR DI[[R]] *dirp);
*directory stream を close し関連付けられていたresourceを開放する。
*成功すると 0を返し、失敗すると -1を返す。
#include <sys/stat.h>
void printdir(char *dir, int depth)
{ DIR DI[[R]] *dp;
struct dirent *entry;
struct stat statbuf;
while((entry = readdir(dp)) != NULL) {
lstat(entry->d_name, &statbuf);
if(S_ISDIRS_ISDI[[R]](statbuf.st_mode)) {
if(strcmp(".",entry->d_name) == 0
|| strcmp("..",entry->d_name) == 0) {

案内メニュー