スポンサーリンク

DIRECTORY(3) FreeBSD ライブラリ関数マニュアル DIRECTORY(3)

名称

opendir, readdir, readdir_r, telldir, seekdir, rewinddir, closedir, dirfd − ディレクトリ操作

ライブラリ

標準 C ライブラリ (libc, −lc)

書式

#include <sys/types.h>
#include <dirent.h>

DIR *

opendir(const char *filename);

struct dirent *

readdir(DIR *dirp);

int

readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

long

telldir(DIR *dirp);

void

seekdir(DIR *dirp, long loc);

void

rewinddir(DIR *dirp);

int

closedir(DIR *dirp);

int

dirfd(DIR *dirp);

解説

opendir() 関数は、 filename で指定されたディレクトリを開き、 ディレクトリ ストリームをそれに対応させ、後続の操作で ディレクトリストリームを識別する のに使用するポインタを返します。 filename にアクセスできない場合、または すべてのものを保持するのに十分なメモリを malloc(3) できない場合は、ポイン タ NULL が返されます。

readdir() 関数は、次のディレクトリエントリを指すポインタを返します。この 関数は、ディレクトリの末尾に到達するか、または無効な seekdir() 操作を検出 すると NULL を返します。

readdir_r() は、 readdir() と同様の機能を提供しますが、呼び出し元は結果を 格納するためのディレクトリ entry バッファを提供しなければなりません。読み 込みが成功すると resultentry を指し、ディレクトリの末尾に達すると result は NULL に設定されます。 readdir_r() は、成功した場合 0 を返し、そ うでなければ失敗を示すエラーナンバを返します。

telldir() 関数は、指定された ディレクトリストリームに関連付けられている現 在の位置を返します。 telldir() が返す値が有効なのは、その値が引き出された 元の DIR ポインタ dirp が生きている間だけです。ディレクトリが閉じられ再び 開かれると、 telldir() が返した以前の値はもはや有効ではありません。

seekdir() 関数は、その ディレクトリストリームに対する次の readdir() 操作 の位置を設定します。新しい位置は、その ディレクトリストリームと関連付けら れているもので、 telldir() 操作が実行されたときに返されるものです。

rewinddir() 関数は、指定された ディレクトリストリームの位置をそのディレク トリの先頭に戻します。

closedir() 関数は、指定された ディレクトリストリームを閉じ、 dirp ポイン タに関連付けられた構造体を解放します。処理が成功した場合は 0 を返します。 処理が失敗すると −1 が返され、エラーを示ためにグローバル変数 errno が設定 されます。

dirfd() 関数は、指定された ディレクトリストリームに関連付けられた整数の ファイル記述子を返します。 open(2) を参照してください。

ディレクトリでエントリ ‘‘name’’ を検索するサンプルコードは次のとおりで す。

      len = strlen(name);
      dirp = opendir(".");
      while ((dp = readdir(dirp)) != NULL)
              if (dp->d_namlen == len && !strcmp(dp->d_name, name)) {
                      (void)closedir(dirp);
                      return FOUND;
              }
      (void)closedir(dirp);
      return NOT_FOUND;

関連項目 close(2), lseek(2), open(2), read(2), dir(5)

歴史

opendir(), readdir(), telldir(), seekdir(), rewinddir(), closedir() およ び dirfd() の各関数は 4.2BSD で登場しました。

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク